Vérifier si un fichier existe ou non dans Windows PowerShell?

j'ai ce script qui compare des fichiers dans deux zones du disque et copie le dernier fichier sur celui avec l'ancienne date de modification.

$filestowatch=get-content C:Hfiles-to-watch.txt

$adminFiles=dir C:Hadminadmin -recurse | ? { $fn=$_.FullName; ($filestowatch | % {$fn.contains($_)}) -contains $True}

$userFiles=dir C:Huseruser -recurse | ? { $fn=$_.FullName; ($filestowatch | % {$fn.contains($_)}) -contains $True}

foreach($userfile in $userFiles)
{

      $exactadminfile= $adminfiles | ? {$_.Name -eq $userfile.Name} |Select -First 1
      $filetext1=[System.IO.File]::ReadAllText($exactadminfile.FullName)
      $filetext2=[System.IO.File]::ReadAllText($userfile.FullName)
      $equal = $filetext1 -ceq $filetext2 # case sensitive comparison

      if ($equal) { 
        Write-Host "Checking == : " $userfile.FullName 
        continue; 
      } 

      if($exactadminfile.LastWriteTime -gt $userfile.LastWriteTime)
      {
         Write-Host "Checking != : " $userfile.FullName " >> user"
         Copy-Item -Path $exactadminfile.FullName -Destination $userfile.FullName -Force
       }
       else
       {
          Write-Host "Checking != : " $userfile.FullName " >> admin"
          Copy-Item -Path $userfile.FullName -Destination $exactadminfile.FullName -Force
       }
}
<!-Voici le format des fichiers à regarder.txt

contentless_light.less
contentless_mixins.less
contentless_variables.less
contentfont-awesomevariables.less
contentfont-awesomemixins.less
contentfont-awesomepath.less
contentfont-awesomecore.less

je voudrais modifier ceci pour éviter de le faire si le fichier n'existe pas dans les deux zones et imprime un message d'avertissement. Est-ce que Quelqu'un peut me dire comment je peux vérifier si un fichier existe en utilisant PowerShell?

19
demandé sur wonea 2015-08-07 17:12:17

6 réponses

Seulement l'alternativeTest-Path applet de commande (puisque personne ne l'a mentionné):

[System.IO.File]::Exists($path)

Ne (presque) la même chose que

Test-Path $path -PathType Leaf

sauf aucun support pour les caractères génériques

42
répondu Mathias R. Jessen 2015-08-07 15:21:16

Utiliser Test-Path:

if (!(Test-Path $exactadminfile) -and !(Test-Path $userfile)) {
  Write-Warning "$userFile absent from both locations"
}

Placer le code ci-dessus dans votre ForEach boucle doit faire ce que vous voulez

20
répondu arco444 2017-10-02 09:07:25

vous voulez utiliser Test-Path.

Test-Path <path to file> -PathType Leaf
5
répondu GodEater 2015-08-07 14:21:45

la façon standard de voir si un fichier existe est avec le Test-Path applet de commande.

Test-Path -path $filename
3
répondu Mike Shepard 2015-08-07 14:22:19

Vous pouvez utiliser le Test-Path cmd-let. Donc, quelque chose comme...

if(!(Test-Path [oldLocation]) -and !(Test-Path [newLocation]))
{
    Write-Host "$file doesn't exist in both locations."
}
2
répondu Speerian 2015-08-07 14:24:44

Test-Path peut donner une réponse étrange. Par exemple: "Parcours d'essai c:\temp\ - PathType leaf" donne false, mais "Test-Path c:\temp* - PathType leaf" donne true. Triste :(

-1
répondu Zoltan Hernyak 2017-07-03 08:51:26