У меня есть 2 жестких диска, я скопировал все с одного жесткого диска на новый диск, но некоторые файлы не копировались, поскольку они были повреждены. Есть ли простой способ проверить, какие файлы с одного жесткого диска не находятся на другом?
2 ответа
robocopy sourcedriveletter: destinationdriveletter: /MIR /LOG:logfilename.txt /TEE /L
Robocopy - это инструмент командной строки, встроенный в окна. Вы можете проверить параметры, открыв приглашение cmd (для этой цели, вероятно, от имени администратора) и набрав robocopy /?
или robocopy /? > %USERPROFILE%\desktop\robocopyoptions.txt
если вам нужна версия справочного документа в виде текстового файла.
В моем примере выше /MIR
означает "зеркало", и оно дублирует "источник" в "месте назначения" и удаляет в "месте назначения" все, что не находится в "источнике".
/log:
записывает в файл, /TEE
выводит на консоль, а также в файл журнала.
Последняя команда /L
устанавливает его только для списка и фактически не будет копировать или удалять файлы.
Журнал очень четко покажет вам, какие файлы в источнике не существуют в месте назначения.
Конечно, я настоятельно призываю вас сначала изучить справочные документы, чтобы убедиться в правильности моего примера.
обратная связь от 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