我试图编写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语句的变量中添加转义的引号,但这没有任何效果。
outfile确实显示了正确的文件路径,因此它似乎获得了正确的信息。我不明白的是,为什么数组$C_P86Files_Name
似乎使用路径中的每个字符作为数组中的索引,而不是使用Get-ChildItem中的每个文件管理器作为数组中的索引?