首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell -比较.txt文件的源目录和目标目录。将所有尚未在目标目录中的文件复制到目标和第三个目录

Powershell -比较.txt文件的源目录和目标目录。将所有尚未在目标目录中的文件复制到目标和第三个目录
EN

Stack Overflow用户
提问于 2015-05-08 12:44:27
回答 1查看 337关注 0票数 0

需要将源目录$source$dest进行比较,以查看源代码中的.wav文件,而不是目标文件。我希望将那些不在目标中的文件复制到目标和第三个目录$sharefolder。这是我到目前为止所拥有的。copy-item似乎将所有的差异放在一个复制字符串中:

代码语言:javascript
复制
$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 ;,这就是我得到的

代码语言:javascript
复制
\\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来的,所以这对我来说是新的。

EN

回答 1

Stack Overflow用户

发布于 2015-05-08 13:55:03

这并不完全是ForEach-Object的工作方式。您需要将对象输送到它,它将为您遍历它们。您正确地使用了上面的行(%ForEach-Object的别名)。

代码语言:javascript
复制
$diff | ForEach-Object { 
    Copy-Item "$_" "$comparefolder" -WhatIf
    Copy-Item "$_" "$sharefolder" -WhatIf
}

Get-Help ForEach-Object

您还可以使用foreach语句,它做类似的事情,但不是cmdlet:

代码语言:javascript
复制
foreach ($file in $diff) {
    Copy-Item "$file" "$comparefolder" -WhatIf
    Copy-Item "$file" "$sharefolder" -WhatIf
}

Get-Help about_foreach

它们的功能略有不同,也有各自的好处--对于小型集合来说,foreach更快,而ForEach-Object接受来自管道的输入,并且能够在进入管道时立即流对象--但在这里它们基本上是相同的。

请注意,据我所知,Compare-Object只是比较没有文件和目录对象路径的名称。就像它不看文件大小或日期,更不用说内容了。这也许可以满足你的需求,但它会抛给人,IMX。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30124210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档