Я пытаюсь написать скрипт Powershell для инкрементного дифференциального резервного копирования моего компьютера, однако у меня возникают проблемы с интерпретацией Powershell переменных пути к файлу.
$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)"
Выходные данные заканчиваются тем, что вместо того, чтобы проходить через C:\Program Files (x86)\Test
, он пытается перебрать каждую букву этого пути, как если бы это был файл, а затем выполнить соответствующую ошибку (например, он проверяет "C" и затем проверяет «:», затем проверяет «\» и т. д.).
Я попытался добавить экранированные кавычки к переменным в операторе IF, но это ничего не дало.
Выходной файл показывает правильный путь к файлу, поэтому он, кажется, получает правильную информацию. Я не понимаю, почему массив $C_P86Files_Name
видимому, использует каждый символ пути в качестве индекса в массиве, а не каждый файлер из Get-ChildItem в качестве индекса в массиве?