Пожалуйста, обратите внимание на этот вопрос: Iterating through folders and files in batch file?
.
Я думаю, это должно вам помочь.
Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.
РЕДАКТИРОВАТЬ # 1
Символ джокера в командной строке DOS - *
. Затем при поиске в каталоге определенных файлов вы можете рассмотреть свое регулярное выражение, то есть XXX_
, и дополнить его *
, при этом будут возвращены только те файлы, которые вы ищете.
Это означает, что вместо шаблона *.zip
в одном из циклов FOR
с учетом связанного вопроса ваш первый цикл FOR
должен содержать имя вашего каталога, а затем взять эту переменную, объединенную с символом *
, чтобы получить только файлы, которые вы ищете.
Например, попробуйте следующее:
dir /s XXX_*.*
Это должно вернуть только те файлы, которые вам интересны, с правильным названием папки.
РЕДАКТИРОВАТЬ # 2
Спасибо, что уточнили ваше беспокойство.
Вот пример кода, который, я надеюсь, должен помочь. Теперь я знаю, что вы говорите, что у вас правильный цикл, так что, возможно, понадобится только часть этого кода.
@echo off
setlocal enableextensions enabledelayedexpansion
for /F "delims==" %%d in ('dir /ogne /ad /b /s .') do (
for /F "delims==" %%f in ('dir /b "%%d\%%~nd_*.*"') do (
echo %%d\%%f
)
)
endlocal
Это работает и перечисляет файлы, содержащиеся в подпапках из текущей (.
) папки.
Я проверил его из следующей папки:
C: \ DOCUME ~ 1 \ marw1 \ MyDocu ~ 1 \ MyMusi ~ 1
Где находится папка «XXX». Эта папка «XXX» содержит следующие файлы:
- Копия XXX_blah.bmp;
- XXX_blah.bmp;
- XXX_1234.ppt;
- XXX_textfile.txt.
Из этой структуры вывод:
C: \ DOCUME ~ 1 \ marw1 \ MyDocu ~ 1 \ MyMusi ~ 1 \ XXX \ XXX_blah.bmp
C: \ DOCUME ~ 1 \ marw1 \ MyDocu ~ 1 \ MyMusi ~ 1 \ XXX \ XXX_1234.ppt
C: \ DOCUME ~ 1 \ marw1 \ MyDocu ~ 1 \ MyMusi ~ 1 \ XXX \ XXX_textfile.txt
Тогда я подозреваю, что если вместо команды echo
использовать инструкцию del
, то добьемся цели. Это означает, что для изоляции самого Foldername от его пути вам необходимо использовать инструкцию ~n
с именем переменной вашей папки, например %%~nd
, где имя переменной итерируемой папки - %%d
.
Более того, вы можете даже использовать в процессе параметризованный пакетный файл вместо его жесткого кодирования, то есть, если ваш 'set YourFolder =...'
является частью вашего рабочего кода. Это может выглядеть так:
@echo off
setlocal...
set root = %1
set root = %root:~1%
set root = %root:~0,-1%
...
endlocal
Вместо того, чтобы иметь '.'
, как показано в моем первом цикле FOR
, вы заменили бы его на "%root%"
, чтобы рассматривать ваш параметр командной строки вместо жестко заданного пути к файлу.
Я помогаю, это помогает, искренне!