Ich versuche, ein Powershell-Skript zu schreiben, um eine inkrementelle differenzielle Sicherung meines Computers durchzuführen, habe jedoch Probleme damit, wie Powershell Dateipfadvariablen interpretiert.
$C_P86Files_Name=Get-ChildItem -File -Path 'C:\Program Files (x86)\Test' -Recurse | foreach FullName
$B_P86Files_Name
$MovedFiles=0
$MovedBytes=0
#Out-File -FilePath 'C:\Program Files (x86)\Test\Test.txt' -InputObject $C_P86Files_Name
Get-ChildItem -File 'C:\Program Files (x86)\Test' -Recurse | foreach FullName
for ($i=0; $i -le ($C_P86Files_Name.Length-1); $i++)
{
$B_P86Files_Name = $C_P86Files_Name[$i] -replace "^C", "B"
Write-Host "Checking $($C_P86Files_Name[$i])"
Write-Host "B drive directory: $($B_P86Files_Name[$i])"
if(((ls $C_P86Files_Name[$i]).LastWriteTime -ne (ls $B_P86Files_Name[$i]).LastWriteTime) -or ((Test-Path $C_P86Files_Name[$i]) -and (!(Test-Path $B_P86Files_Name[$i]))))
{
Copy-Item $C_P86Files_Name[$i] -Destination $B_P86Files_Name[$i]
$MovedFiles++;
$MovedBytes+=(Get-Item $C_P86Files_Name[$i]).length
Write-Host "Moved $($C_P86Files_Name[$i]) to $($B_P86Files_Name[$i])"
}
}
Write-Host "Total data moved: $($MovedBytes)"
Die Ausgabe zeigt am Ende, dass C:\Program Files (x86)\Test
es versucht hat, jeden Buchstaben dieses Pfads zu durchlaufen , anstatt ihn zu durchlaufen , als wäre es eine Datei. " und so weiter).
Ich habe versucht, den Variablen in der IF-Anweisung Anführungszeichen mit Escapezeichen hinzuzufügen, aber dies hatte keine Auswirkungen.
Das Outfile zeigt einen korrekten Dateipfad an, daher scheint es die korrekten Informationen zu erhalten. Was ich nicht verstehe, ist, warum das Array $C_P86Files_Name
jedes Zeichen aus dem Pfad als Index im Array verwendet, anstatt jeden Filer von Get-ChildItem als Index im Array?
quelle