需要将源目录$source与$dest进行比较,以查看源代码中的.wav文件,而不是目标文件。我希望将那些不在目标中的文件复制到目标和第三个目录$sharefolder。这是我到目前为止所拥有的。copy-item似乎将所有的差异放在一个复制字符串中:
$sharefolder = '\\isilon1\blob\partial_dictation'
$comparefolder = '\\isilon1\blob\partial_dictation_compare'
$source = Get-childitem \\isilon1\blob\dcbld\pv -filter *.wav -recurse
$dest = Get-ChildItem \\isilon1\blob\Partial_Dictation_Compare -filter *.wav -recurse
$diff = Compare-Object $dest $source -passthru | Where-Object {$_.SideIndicator -EQ "=>"} | % {$_.FullName}
ForEach-Object {
Copy-Item "$diff" "$comparefolder" -WhatIf
Copy-Item "$diff" "$sharefolder" -WhatIf
}如果我echo $diff ;,这就是我得到的
\\isilon1\blob\dcbld\pv\-D\CB\LD\-9\94\1.wav
\\isilon1\blob\dcbld\pv\-D\CB\LD\-9\94\2.wav这是正确的,因为这些文件不在目的地。当复制项运行时,它提供如下内容:
复制项:找不到路径‘\isilon1 1\blob\dcbld\pv\CB\LD\LD-9\94\1.wav\isilon1 1\blob\dcbld\pv-D\CB\LD-9\94\2.wav’,因为它不存在。
我是从Unix来的,所以这对我来说是新的。
发布于 2015-05-08 13:55:03
这并不完全是ForEach-Object的工作方式。您需要将对象输送到它,它将为您遍历它们。您正确地使用了上面的行(%是ForEach-Object的别名)。
$diff | ForEach-Object {
Copy-Item "$_" "$comparefolder" -WhatIf
Copy-Item "$_" "$sharefolder" -WhatIf
}见Get-Help ForEach-Object。
您还可以使用foreach语句,它做类似的事情,但不是cmdlet:
foreach ($file in $diff) {
Copy-Item "$file" "$comparefolder" -WhatIf
Copy-Item "$file" "$sharefolder" -WhatIf
}见Get-Help about_foreach。
它们的功能略有不同,也有各自的好处--对于小型集合来说,foreach更快,而ForEach-Object接受来自管道的输入,并且能够在进入管道时立即流对象--但在这里它们基本上是相同的。
请注意,据我所知,Compare-Object只是比较没有文件和目录对象路径的名称。就像它不看文件大小或日期,更不用说内容了。这也许可以满足你的需求,但它会抛给人,IMX。
https://stackoverflow.com/questions/30124210
复制相似问题