У меня есть 2 жестких диска, я скопировал все с одного жесткого диска на новый диск, но некоторые файлы не копировались, поскольку они были повреждены. Есть ли простой способ проверить, какие файлы с одного жесткого диска не находятся на другом?

2 ответа2

3
robocopy sourcedriveletter: destinationdriveletter: /MIR /LOG:logfilename.txt /TEE /L

Robocopy - это инструмент командной строки, встроенный в окна. Вы можете проверить параметры, открыв приглашение cmd (для этой цели, вероятно, от имени администратора) и набрав robocopy /? или robocopy /? > %USERPROFILE%\desktop\robocopyoptions.txt если вам нужна версия справочного документа в виде текстового файла.

В моем примере выше /MIR означает "зеркало", и оно дублирует "источник" в "месте назначения" и удаляет в "месте назначения" все, что не находится в "источнике".

/log: записывает в файл, /TEE выводит на консоль, а также в файл журнала.

Последняя команда /L устанавливает его только для списка и фактически не будет копировать или удалять файлы.

Журнал очень четко покажет вам, какие файлы в источнике не существуют в месте назначения.

Конечно, я настоятельно призываю вас сначала изучить справочные документы, чтобы убедиться в правильности моего примера.

2

обратная связь от OP: метод Excel не работает для него, метод Matlab не проверен У меня есть очень не элегантное решение, но я думаю, что оно работает (при условии, что у вас есть Excel). Это работает только в том случае, если количество имен файлов соответствует Excel. (Excel имеет ограниченное максимальное количество строк: 1 048 576).

Перейти к cmd (я предполагаю, что вы находитесь на окнах). Смени каталог на первый диск. Тип:

dir /s/b/o:gn > drive1.txt

Сделайте то же самое для второго диска, но измените имя txt-файла.

Я взял строку cmd с: https://stackoverflow.com/questions/3447503/how-to-get-a-list-of-sub-folders-and-their-files-ordered-by-folder-names .

Скопируйте оба вывода в Excel (при условии, что 2007 или новее). Самый простой вариант, о котором я знаю, это следующее:

  • Выберите столбцы, содержащие выходные данные cmd.
  • На вкладке данных в группе «Сортировка и фильтр» нажмите «Дополнительно».
  • В диалоговом окне «Расширенный фильтр» выполните одно из следующих действий:
    • Чтобы отфильтровать диапазон ячеек или таблицы на месте, нажмите «Фильтровать список» на месте.
    • Чтобы скопировать результаты фильтра в другое место, сделайте следующее:
      • Нажмите Скопировать в другое место.
      • В поле «Копировать в» введите ссылку на ячейку.
  • Либо нажмите Свернуть изображение кнопки диалога, чтобы временно скрыть диалоговое окно, выберите ячейку на листе и нажмите Развернуть изображение кнопки диалога.
  • Установите флажок «Только уникальные записи» и нажмите «ОК».
  • Уникальные значения из выбранного диапазона копируются в новое местоположение. Исходные данные не затрагиваются.

Таким образом, у вас должен быть список всех уникальных имен файлов, который совпадает со списком всех имен файлов, которые не были скопированы.

В конце концов, процедура Excel была взята по адресу : https://support.office.com/en-us/article/Filter-for-unique-values-or-remove-duplicate-values-d6549cf0-357a-4acf-9df5- ca507915b704 # bmfilter_for_unique_values

В качестве альтернативы вы можете использовать команду cmd в Matlab.

Команда в Matlab может быть:

DosCommand=sprintf('%s %s','dir /    B',directory);
    [status, cmdout]=dos(DosCommand);
end
Filenames = strread(cmdout,'%s'); 

Затем выполните:

NonCopiedFilenames = 

A(sum(bsxfun(@eq, A(:), A(:).'))==1);

Трюк с уникальными значениями был скопирован с: https://stackoverflow.com/questions/19236914/how-to-find-a-unique-value-in-a-matrix-by-using-matlab

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .