Сравнение каталогов в Windows

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

  • Запуск программы из Windows run
  • Регулярно ли вредит ноутбуку или Windows?
  • Windows - прокрутка с четырьмя пальцами для пространств (простыни)
  • Можно ли настроить часы Windows на 24-часовое время?
  • Как отключить все звуковые сигналы?
  • Планирование задачи программы GUI и отображение ее графического интерфейса при входе в систему
  • Интернет и электронная почта
  • Как Windows знает, не отвечает ли программа?
  • Можно ли настроить часы Windows на 24-часовое время?
  • Как скопировать все имена файлов в папку в блокнот?
  • Где можно загрузить предыдущие версии операционных систем Microsoft?
  • Окно невозможно настроить после восстановления системы
  • 7 Solutions collect form web for “Сравнение каталогов в Windows”

    Используйте WinDiff . Он поставляется с Visual Studio и Platform SDK и может быть загружен отдельно . Это в основном для сравнения файлов, но также позволяет рекурсивно сравнивать папки.

    Если вы ищете ручной процесс и имеете визуальную студию, то вы можете использовать windiff.exe, чтобы показать различия.

    В PowerShell:

    $d1 = get-childitem -path $dir1 -recurse $d2 = get-childitem -path $dir2 -recurse compare-object $d1 $d2 

    Я использую PathSync

    Вы можете попробовать этот vbscript, не нужно скачивать какие-либо вещи.

     Set objFS = CreateObject("Scripting.FileSystemObject") Set d = CreateObject("Scripting.Dictionary") Set objArgs = WScript.Arguments strFolderA= objArgs(0) strFolderB = objArgs(1) Set objFolder = objFS.GetFolder(strFolderA) Set objFolder1 = objFS.GetFolder(strFolderB) For Each strFile In objFolder.Files strFileName = strFile.Name strFilePath = strFile.Path 'collect all files and their full paths. d.Add strFileName, strFilePath Next For Each strFile In objFolder1.Files strFileName = strFile.Name strFilePath = strFile.Path If Not d.Exists(strFileName) Then WScript.Echo "Not found in : " & strFolderA & "->" & strFilePath End If Next 

    вывод

     C:\test>dir /B c:\tmp file test.bat C:\test>dir /B c:\tmp1 test.bat C:\test>cscript //nologo test.vbs c:\tmp1 c:\tmp Not found in : c:\tmp1->C:\tmp\file 

    FreeCommander делает это быстро. Выберите папку справа, выберите папку слева, сравните. Это удобная утилита.

    В cygwin

     comm <options> <(cd $dir1;find -type <type>|sort) <(cd $dir2;find -type <type>|sort) |less -S 

    Команда comm дает три столбца вывода, если вы не подавите их.

    Я использовал -S поэтому меньше не обертывать, и вы можете ясно видеть столбцы.

    опции

    • -23 показывает, что уникально для $ dir1 в первом столбце, подавляет другие два столбца
    • -13 показывает, что уникально для $ dir2 во втором столбце, подавляет другие два столбца
    • -12 показывает все то же самое между $ dir1 и $ dir2, подавляет первые два столбца

    тип

    f для просто файлов d для просто директории или использования типа дважды с обоими или удалить тип вообще для всего.

    В CMD

    Примечание не тестировалось ниже. Я предполагаю, что труба работает в CMD.

    Если у вас есть findutils и coreutils отсюда http://gnuwin32.sourceforge.net/packages.html (потому что вы не хотите cygwin) и меньший пакет (но вы можете использовать > \somepath\file вместо |less -S Затем notepad file т. Д.).

     cd %dir1% find -type <type> | sort > \somepath\file1 cd %dir2% find -type <type> | sort > \somepath\file2 comm <options> file1 file2 |less -S 

    Обратите внимание на замену $ … и # … # путями, если вы не знаете, как создавать переменные 🙂

    Давайте будем гением компьютера.