Ich habe dieses Skript, das Dateien in zwei Bereichen der Festplatte vergleicht und die neueste Datei über die Datei mit dem älteren Änderungsdatum kopiert.
$filestowatch=get-content C:\H\files-to-watch.txt
$adminFiles=dir C:\H\admin\admin -recurse | ? { $fn=$_.FullName; ($filestowatch | % {$fn.contains($_)}) -contains $True}
$userFiles=dir C:\H\user\user -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
}
}
Hier ist das Format von files-to-watch.txt
content\less\_light.less
content\less\_mixins.less
content\less\_variables.less
content\font-awesome\variables.less
content\font-awesome\mixins.less
content\font-awesome\path.less
content\font-awesome\core.less
Ich möchte dies so ändern, dass dies vermieden wird, wenn die Datei nicht in beiden Bereichen vorhanden ist und eine Warnmeldung ausgegeben wird. Kann mir jemand sagen, wie ich mit PowerShell überprüfen kann, ob eine Datei vorhanden ist?
powershell
powershell-3.0
Samantha JT Star
quelle
quelle
[System.IO.File]::Exists
auch löst relative Pfade unterschiedlich undTest-Path
können mit nicht-Dateipfade (zB Registrierungsstellen) verwendet werden. Verwenden SieTest-Path
.[System.IO.File]::($(Join-Path $PWD $path))
[System.IO.Directory]::Exists($path)
um Ordner handelt. Beide unterstützen UNC-Pfade auf meinem System, aber um versteckte Freigaben zu machen, denken Sie daran,$
dem Pfad als "` $ " zu entkommenVerwenden Test-Path :
Das Platzieren des obigen Codes in Ihrer
ForEach
Schleife sollte das tun, was Sie wollenquelle
Sie möchten verwenden
Test-Path
:quelle
Die Standardmethode zum
Test-Path
Überprüfen, ob eine Datei vorhanden ist, ist das Cmdlet.quelle
Sie können das
Test-Path
cmd-let verwenden. Also so etwas wie ...quelle
quelle
Testpfad kann ungerade Antwort geben. Beispiel: "Testpfad c: \ temp \ -PathType leaf" gibt false aus, "Testpfad c: \ temp * -PathType leaf" gibt true an. Traurig :(
quelle