Powershell文件比较

zeb*_*idy 14 powershell

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

我想

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

InputObject           SideIndicator                              
-----------           -------------                              
D:\1.gif               =>                                         
D:\1.wma               <=    
Run Code Online (Sandbox Code Playgroud)

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

Jay*_*kul 11

我想这将取决于你对"相同"的定义

Compare-Object (ls Source\Test.*) (ls Dest\Test.*) -Property Name, Length, LastWriteTime
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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


小智 8

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

  • 是的-在某些情况下。正如@Jaykul所说,“这取决于您对“相同”的定义。示例:我有两个文件,它们的名称和LastWriteTime不同,但是其内容相同。这种解决方案是比较两个文件内容的最快,最好的方法(出于上述与内存相关的原因,它比“ Get-Content”更好)。 (4认同)

Joe*_*oey 6

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

Compare-Object (gc $File1) (gc $File2)
Run Code Online (Sandbox Code Playgroud)

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