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?
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
vous voulez utiliser Test-Path.
Test-Path <path to file> -PathType Leaf
la façon standard de voir si un fichier existe est avec le Test-Path
applet de commande.
Test-Path -path $filename
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."
}
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 :(