Powershell文件比较

时间:2010-08-16 05:30:20

标签: powershell

我正在使用PowerShell脚本在某些服务器上移动一些文件。 我想测试我要移动的文件是否已存在于目标中。 不只是一个同名的文件。

我想

Compare-Object $File1 $File2
应该这样做,但无论文件是什么,它总是返回它们是相同的 例如

InputObject           SideIndicator                              
-----------           -------------                              
D:\1.gif               =>                                         
D:\1.wma               <=    

是否有其他方法可以测试两个文件是否相同?

6 个答案:

答案 0 :(得分:10)

我想这取决于你对“相同”的定义

Compare-Object (ls Source\Test.*) (ls Dest\Test.*) -Property Name, Length, LastWriteTime

这将按名称,长度和修改日期比较实际的FILE对象。添加-IncludeEqual也会导致两个地方都显示相同的内容。

如果您只想复制“来源”中与“目的地”不同的文件,请执行以下操作:

Compare-Object (ls $Source) (ls $Destination) -Property Name, Length, LastWriteTime -passthru | 
Where { $_.PSParentPath -eq (gi $Source).PSPath } |
Copy-Item $Destination

不要开始编写获取内容的脚本(按照其他人的建议)进行文件比较 - 你要将所有内容加载到内存中......

请考虑使用robocopy(即使它的命令行语法已过时)。 =Þ

答案 1 :(得分:6)

你只是给Compare-Object两个字符串,你想要文件内容:

Compare-Object (gc $File1) (gc $File2)

您输出的输出也意味着文件是相同的。

答案 2 :(得分:5)

(Get-FileHash $ path1).Hash -eq(Get-FileHash $ path2).Hash

答案 3 :(得分:3)

comp.exefc.exe出了什么问题?只需检查$?在调用它们以查看命令是否成功之后。

答案 4 :(得分:2)

compare $file1 $file2 -includeequal -excludedifferent

答案 5 :(得分:1)

您可以测试文件内容的相等性,给定路径$path1$path2,如下所示:

[io.file]::ReadAllText($path1) -eq [io.file]::ReadAllText($path2)

...虽然您可以选择比较::ReadAllBytes()方法的结果。

说实话,我只使用Robocopy,即使是来自PowerShell,当我只关心复制已更改或添加的文件时。

相关问题