1

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

Вопрос

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

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

4 ответа4

0

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

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

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

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

0

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

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

Вы можете использовать некоторую условную логику, чтобы проверить, существует ли файл для копирования, уже существует в целевой папке, и если это так, то вызовите подпрограмму и передайте ей замены переменных, чтобы добавить _(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"

0

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

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

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

0

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

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

cd /d "d:\vacation snaps\2016"

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

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

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

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