Как извлечь файлы из всех подпапок и переместить их в первую папку

338
InstaPoppy

У меня около 3 ТБ восстановленных данных со сломанного жесткого диска. Проблема в том, что все файлы и папки полностью зашифрованы и помещены в тысячи вложенных папок.

Вопрос

Есть ли серия команд, в которых я могу выполнить, cmdчтобы найти все файлы и переместить их в первую папку и по пути избавиться от пустых подпапок?

Если найденные файлы можно отсортировать по расширению и поместить в новую папку для каждого расширения, это было бы еще лучше. Я использую компьютер с Windows 10.

1

4 ответа на вопрос

0
Win32Guy

От Как скопировать файлы из нескольких вложенных папок в одну папку?

Откройте окно командной строки ('cmd.exe'). Используйте следующие команды:

cd /d "d:\vacation snaps\2016"  for /r %d in (*) do copy "%d" "d:\all snaps" 

В приведенном выше примере команда рекурсивно копирует все файлы в папке «snaps \ 2016» в папку «All Snaps».

Поочередно используйте Windows Search. См. Как скопировать файлы из нескольких подпапок в одну папку?

Что происходит, когда приведенный выше скрипт встречает идентичные имена файлов? JohnnyVegas 5 лет назад 2
0
JohnnyVegas

Установите бесплатную утилиту «Все» с http://voidtools.com/

Это быстро индексирует каждый файл на вашем жестком диске. Откройте окно «все» и найдите все файлы, набрав '*.*'или'driveletter:/folder/*.*

Как только все файлы в списке появятся, выберите все, затем щелкните правой кнопкой мыши и выберите Копировать.

Вставьте в свою папку, обращая внимание на диалоговое окно Windows 10, которое может появиться при попытке вставить повторяющееся имя файла. Это даст вам возможность переименовать все, поместив число в конце имени файла.

0
Pimp Juice IT

Пакетное решение сценария

Вы можете установить в качестве переменной родительскую папку, содержащую все файлы в структуре, которые необходимо скопировать в родительскую папку. Затем вы можете использовать для / г цикла и условного, если логика и переменные подстановки для выполнения копирования, удаления и операции создания папки расширения файла по мере необходимости.

Вы можете использовать некоторую условную логику, чтобы проверить, существует ли уже копируемый файл в папке назначения, и если это так, то вызовите подпрограмму и передайте ей подстановки переменных, чтобы добавить _(dupe)к этому имени файла, чтобы он не перезаписывал существующие файлы с тем же имя файла.

Чтобы быстро удалить пустые директории в папке родительского можно запустить Robocopyтакую команду, Robocopy <dest> <dest> /S /MOVEгде destinationи sourceпараметры оба одинаковы и равны полный путь родительской папки.

Пакетный скрипт

@ECHO OFF  SET "Parent=C:\Momma" SET "dupCnt=1"  FOR /R "%Parent%" %%C IN (*) DO ( IF NOT EXIST "%Parent%\%%~XC" MD "%Parent%\%%~XC" IF NOT EXIST "%Parent%\%%~XC\%%~NXC" ( XCOPY /Y /F "%%~C" "%Parent%\%%~XC\" && DEL /Q /F "%%~C" ) ELSE ( CALL :Routine "%Parent%\%%~XC\%%~NXC" "%%~C" "%%~NC" "%%~XC" ) ) Robocopy "%Parent%" "%Parent%" /S /MOVE GOTO :EOF  :Routine IF EXIST "%Parent%\%~4\%~3_(dupe%dupCnt%)%~4" ( SET /A dupCnt=%dupCnt%+1 CALL :Routine "%~1" "%~2" "%~3" "%~4" ) ELSE (  IF EXIST "%~1" ( ECHO F | XCOPY /Y /F "%~2" "%Parent%\%~4\%~3_(dupe%dupCnt%)%~4" && DEL /Q /F "%~2" SET "dupCnt=1" ) ) GOTO :EOF 

Пример структуры папок до и после

До

C:\MOMMA ├───Adult-Child │ Adult-Child.jpg │ Adult-Child.txt │ Adult-Child.zzz │ Baby.txt │ ├───Baby │ Adult-Child.txt │ Baby.jpg │ Baby.txt │ Baby.zzz │ Teen.txt │ └───Teen Adult-Child.txt Baby.txt Teen.jpg Teen.txt Teen.zzz 

После

C:\MOMMA ├───.jpg │ Adult-Child.jpg │ Baby.jpg │ Teen.jpg │ ├───.txt │ Adult-Child.txt │ Adult-Child_(dupe1).txt │ Adult-Child_(dupe2).txt │ Baby.txt │ Baby_(dupe1).txt │ Baby_(dupe2).txt │ Teen.txt │ Teen_(dupe1).txt │ └───.zzz Adult-Child.zzz Baby.zzz Teen.zzz 

Дополнительные ресурсы

  • FOR / R
  • ЕСЛИ
  • Мэриленд
  • XCOPY
  • DEL
  • ВЫЗОВ

  • Пакетные замены (ЗА /?)

    Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:

    %~I - expands %I removing any surrounding quotes (") %~nI - expands %I to a file name only %~xI - expands %I to a file extension only 
  • ЗАДАВАТЬ

    Арифметические выражения (SET / a)

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

    Любое SET /Aвычисление, которое возвращает дробный результат, будет округлено до ближайшего целого числа.

    Выражение для оценки может включать следующие операторы:

    + Add set /a "_num=_num+5"

выдающийся ответ JohnnyVegas 5 лет назад 1
0
Peter K.

FreeCommander XE - это бесплатная утилита (альтернатива Windows Explorer), которая имеет функцию «плоского представления» для просмотра всех файлов в каталоге и всех подкаталогах.

Он также имеет довольно мощные опции выбора / поиска, так что вы можете легко выбирать файлы по расширению и переходить в каталог по вашему выбору. Конечно, это ручная работа, но вы продолжаете контролировать то, что делаете.

В целом отличный инструмент, который несколько раз спас мне жизнь при работе с кучей файлов.