2014-02-21 4 views
0

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

комиксов \ move.bat

комиксов \ Серия 000 \ 000 серии бла \ 01.jpg, 02.jpg и т.д.

комиксов \ серии 001 \ 001 серия бла \ бла серии \ 01.jpg, 02.jpg и т.д.

в

комиксов \ серии 000 \ 01.jpg, 02.jpg и т.д.

комиксы \ серии 001 \ 01.jpg, 02. jpg и т. д.

Я пробовал несколько вариантов для/г %% я в (* .jpg) двигаются "%% ~ фи" "%% ~ пи * .jpg"

Но это не будет делать что-нибудь. Один из способов, которым я это сделал, переместил бы все изображения в ту же папку, в которой я запускал скрипт, но это самое близкое, что я получил. Очистка пустых папок тоже будет приятной!

+0

Возможно, один цикл 'for', который нужно остановить в каждой подпапке, и другой' for/r' внутри, чтобы переместить файлы ниже, есть? – BRFennPocock

+0

Вы указываете «вверх по одному каталогу», но ваш второй пример вверх 2. пожалуйста, уточните. – Magoo

ответ

0

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

Проверьте это в папке с копиями ваших файлов.

@echo off 
for /d %%a in (*) do (
    pushd "%%a" 
     for /r %%b in (*.jpg) do move "%%b" . 
    popd 
) 
pause 
for /L %%a in (1,1,5) do for /d /r %%b in (*) do rd "%%b" 2>nul 

Последняя строка должна удалять только пустые папки с глубиной до 5 уровней, если они существуют.

-2

Попробуйте это:

move comics\series 000\series 000 blah\*.jpg comics\series 000 
0

Создать BAT-файл со следующим содержанием на корневую папку и дважды щелкните по нему.

@echo off 
for /f "usebackq tokens=*" %%d in (`dir /s /b /o:n /ad`) do (
    cd "%%d" 
    for /f "usebackq tokens=*" %%f in (`dir /b /o:n /a-d`) do (
    move /y "%%f" .. 
) 
) 
pause 

Чтобы объяснить код, внешний цикл циклически переводит каталоги и cd в него. Внутренний цикл выполняет итерацию всех файлов внутри каталога и перемещает их вверху. /y Флаг в движении - это подавление подсказок. Используйте dir /? для объяснения всех флагов dir. Что касается части for, я взял ее с https://stackoverflow.com/a/2768660/179630

+0

Это собирается перетасовать все файлы на уровне папки, а не перемещать все файлы в одну папку, правильно? Я думаю, что заголовок вводит в заблуждение, потому что вопрос и пример требуют переместить все файлы в ветку в одну папку. – foxidrive

+0

Теперь вопрос был отредактирован, он выглядит совсем по-другому :). Я скоро исправлю свой ответ. – gerrytan

Смежные вопросы