我正在使用PowerShell脚本在某些服务器上移动一些文件。 我想测试我要移动的文件是否已存在于目标中。 不只是一个同名的文件。
我想
Compare-Object $File1 $File2
应该这样做,但无论文件是什么,它总是返回它们是相同的
例如
InputObject SideIndicator
----------- -------------
D:\1.gif =>
D:\1.wma <=
是否有其他方法可以测试两个文件是否相同?
答案 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.exe
或fc.exe
出了什么问题?只需检查$?在调用它们以查看命令是否成功之后。
答案 4 :(得分:2)
compare $file1 $file2 -includeequal -excludedifferent
答案 5 :(得分:1)
您可以测试文件内容的相等性,给定路径$path1
和$path2
,如下所示:
[io.file]::ReadAllText($path1) -eq [io.file]::ReadAllText($path2)
...虽然您可以选择比较::ReadAllBytes()
方法的结果。
说实话,我只使用Robocopy,即使是来自PowerShell,当我只关心复制已更改或添加的文件时。