2014-12-30 2 views
1

Я пишу некоторый (уродливый) код в пакетном режиме, чтобы переупорядочить файлы между папками.Как перемещать папки, если они содержат определенный файл?

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

В конце у меня есть папка под названием «E: \ videos \ catalogar \» с большим количеством подпапок, а некоторые из них содержат файл «series.txt». Мне нужно, чтобы переместить эти папки в путь «E: \ видео \ серии \», а для этого, я написал:

for /r "e:\videos\catalogar\" %%F in (serie.txt) do (
    set directorio=%%~dpF 
    if not "!directorio!"=="e:\videos\catalogar\" (
    del "!directorio!*.txt" 
    move /y "!directorio!." "e:\videos\series\" 
    ) 
) 

delayedexpansion включен. Условие if заключается в том, чтобы не перемещать всю корневую папку.

Проблема заключается в том, что по некоторым причинам этот код перемещает все вложенные папки внутри «E: \ videos \ catalogar \», а не только те, которые содержат «serie.txt». Что не так?

ответ

1
for /r "e:\videos\catalogar\" %%F in (serie.txt) do (

выполняет сканирование каталогов, но делает не использовать FileMask. Он будет использовать только маску файла, если в маске файла содержится * или ?. Лично я считаю, что это ошибка (OK, если маска_файлов является '.', но должен-матч-маски независимо иначе) и, возможно, с просьбой Microsoft, чтобы исправить это для W10 here may work.

Так что - может быть, добавить ворота, как предложено, или включать * или ? в маске файла, чтобы заставить «только сопоставление каталогов» решит вашу проблему.

В любом случае, нет смысла назначать значение directorio, так как %%~dpF будет иметь точно такой же эффект в опубликованном снайпере.

+0

Спасибо, приятель, это работает для меня! Я использовал маску «seri? .txt», и я удалил также условие if. – JohnnyBra

0

for /r проходит дерево каталогов, и вы не проверяете наличие serie.txt во вложенных папках, поэтому скрипт yout пытается каждую папку и каждую папку, кроме корня.

Сценарий, как это будет попробовать один уровень вложенных папок и теста для фиктивных файлов в этих папках:

for /d %f in ("e:\videos\catalogar\*") do (
    if exist "%%f\serie.txt" (
     move ... 
Смежные вопросы