Сравнение файлов Powershell - PullRequest
       3

Сравнение файлов Powershell

13 голосов
/ 16 августа 2010

Я использую скрипт PowerShell для перемещения некоторых файлов на некоторых серверах. Я хочу проверить, существует ли файл, который я собираюсь переместить, в месте назначения. Не просто файл с тем же именем.

Я думал

Compare-Object $File1 $File2
Должен делать это, но независимо от того, что это за файлы, всегда возвращается, что они одинаковые например.

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

Есть ли другой способ проверить, идентичны ли два файла?

Ответы [ 6 ]

11 голосов
/ 16 августа 2010

Полагаю, это будет зависеть от вашего определения "То же самое"

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

, которое будет сравнивать фактические объекты FILE по имени, длине и дате изменения.Добавление -IncludeEqual также приведет к отображению одинаковых в обоих местах.

Если вы хотите копировать только те файлы из «Source», которые не совпадают в «Destination», просто сделайте следующее:

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

НЕ начинайте писать сценарии, которые получают контент (как предложено другими) для сравнения файлов - вы бы загружали все в память ...

НЕ рассматривайте использованиеrobocopy (хотя его синтаксис командной строки устарел).= Þ

6 голосов
/ 29 января 2018

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

6 голосов
/ 16 августа 2010

Вы просто даете две строки для Compare-Object, вам нужно содержимое файла:

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

Кроме того, вывод, который вы даете, не означает, что файлыто же самое.

3 голосов
/ 16 августа 2010

Что не так с comp.exe или fc.exe? Просто проверьте $? после вызова их, чтобы увидеть, была ли команда выполнена успешно или нет.

2 голосов
/ 18 ноября 2012
compare $file1 $file2 -includeequal -excludedifferent
1 голос
/ 16 августа 2010

Вы можете проверить содержимое файла на равенство по заданным путям $path1 и $path2 следующим образом:

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

... Хотя вместо этого вы можете выбрать сравнение результатов метода ::ReadAllBytes().

Если честно, я просто использую Robocopy , даже из PowerShell, когда мне нужно копировать только измененные или добавленные файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...