Полагаю, это будет зависеть от вашего определения "одинаковые"
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
НЕ начинайте писать скрипты get-content (как предлагают другие) для сравнения файлов - вы будете загружать все в память...
ОБЯЗАТЕЛЬНО рассмотрите возможность использования robocopy (хотя синтаксис командной строки устарел). =Þ
Что не так с comp.exe
или fc.exe
? Просто проверьте $? после их вызова, чтобы узнать, прошла команда успешно или нет.
Вы просто даете две строки в Compare-Object
, вам нужно содержимое файла:
Compare-Object (gc $File1) (gc $File2)
Также вывод, который вы даете, не не означает, что файлы совпадают.
Вы можете проверить содержимое файла на равенство, указав пути $ path1
и $ path2
следующим образом:
[io.file]::ReadAllText($path1) -eq [io.file]::ReadAllText($path2)
... Хотя вы можете вместо этого сравнить результаты :: ReadAllBytes ()
метод.
Если честно, я просто использую Robocopy даже из PowerShell, когда мне нужно копировать только измененные или добавленные файлы.