我试图比较数组中单个文件的长度,然后将任何可能小于相应新文件的旧文件复制/返回到新目录。
我遇到的问题是如何将每个文件的大小单独与另一个目录中的相应文件进行比较。这是我的代码:
$oldFile = 'C:\Users\Old\Files\Path'
$newFile = 'C:\Users\New\Files\Path'
$newFileLength = foreach ($Elem in $newFiles) {
$Elem.Length
}
foreach ($Elem in $oldFiles) {
if ($newFileLength -gt $Elem.Length) {
Copy-Item $Elem -Destination 'C:\Users\Difference\Directory'
}
}
导致错误的部分是if
条件。我不认为我正确地调用了单个文件大小,而是在调用我的数组中的元素数量。基本上,我需要一种方法来将我收到的新文件与相应的旧文件进行比较,如果新文件较大,则将旧文件复制到新目录。
答案 0 :(得分:1)
您的代码中存在多个错误:
$oldFile
和$newFile
只是路径字符串,而不是文件集合。$oldFiles
,$newFiles
),因此它们与具有路径字符串($oldFile
,$newFile
)的变量不同。$newFileLength
填充$newFiles
大小的数组。将数组与标量($newFileLength -gt $Elem.Length
)进行比较将为您提供数组中大于标量的值的列表。 PowerShell将非空列表解释为$true
,将空列表解释为$false
,因此如果数组中的大小不超过与数组进行比较的值,则只有条件才会成立。要将$newFile
中文件的各个大小与$oldFile
中的相应文件进行比较,您需要在循环内进行比较,而不是在之后的单独循环中
foreach ($elem in Get-ChildItem $newFile) {
$referenceFile = Join-Path $oldFile $elem.Name
if (Test-Path -LiteralPath $referenceFile) {
if ($elem.Length -gt (Get-Item $referenceFile).Length) {
Copy-Item ...
}
}
}