Я знаю о петлях, таких как

for /r %f in (*) do @move %f .

а также

for /r %f in (.) do @move %f .

но я не могу найти какой-либо код, который соответствует моему сценарию. Скажем, у меня есть много каталогов, которые выглядят так:

Folder 1 
  Folder 2
    File 1
    File 2
    File 3
    Folder 3
      File 4
Folder 4 
  Folder 5
    File 5
    File 6
    File 7
    Folder 6
      File 8

и я хочу поместить файл 4 в папку 2, файл 8 в папку 5 и т. д. как мне поступить? Для этого сценария у меня есть довольно много каталогов, которые выглядят следующим образом, поэтому ручное использование каждого из них не будет работать. Какое самое простое решение, желательно с использованием Batch? Мы надеемся, что конечный результат будет выглядеть так:

Folder 1
  Folder 2
    File 1
    File 2
    File 3
    File 4
Folder 4
  Folder 5
    File 5
    File 6
    File 7
    File 8

1 ответ1

1

Этот набор команд должен поместить все файлы в каталоге в каталог верхнего уровня - поэтому все файлы в папке 1 будут помещены непосредственно в папку 1, а все файлы в папке 4 будут помещены непосредственно в папку 4.

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

dir /ad /b *your current directory* > dirs.txt
for /F "eol=" %i in (dirs.txt) do @echo dir /a-d /b /s %i ^> %i.txt >> script.bat
.\script.bat
for /F "eol=" %j in (dirs.txt) do for /F "eol=" %i in (%j.txt) do @move %i %j

Благодарим за этот вопрос, объясняющий, как рекурсивно перечислять только файлы, и этот вопрос, объясняющий, как использовать цикл for с текстовым файлом.

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