Для тестирования с echo в однострочнике (он должен работать с подпапкой, если вы добавляете /s
в команду dir
)
for /f "delims=" %a in ('dir /b /a-d "?????.txt"^|findstr /R "\\.....\.txt$"') do @echo %~fa
однострочное копирование
for /f "delims=" %a in (
'dir /b /a-d "?????.txt"^|findstr /R "\\.....\.txt$"'
) do @copy "%~fa" "destination-dir"
Пакетный файл
for /f "delims=" %%a in (
'dir /b /a-d "?????.txt"^|findstr /R "\\.....\.txt$"'
) do (
copy "%%~fa" "destination-dir"
)
Редактировать:
/a-d
файлы сканирования объявлений
/ad
папки сканирования объявлений
Без /a[d|-d]
он будет сканировать как видеть dir /?
для дальнейшего чтения
Если я добавил "?????.txt"
в команду « dir
», это уменьшит область сканирования и тем самым сократит время сканирования.
Вы всегда можете расширить область сканирования в команде « dir
», но наиболее важным является шаблон в команде « findstr
»
Я изменил "^.....\.txt"
к "\\.....\.txt$"
для возможности сканирования имени папки.
. Wildcard: any character
ˆ Line position: beginning of line
$ Line position: end of line
\. Escape: literal use of metacharacter .
Смотрите findstr /?
для дальнейшего чтения
Почему это не работает в некоторых случаях? Поскольку не существует универсального решения, вы должны адаптировать команду в вашем случае. Если вы используете /b без /s, команда dir
выдаст вывод без косой черты \
поэтому шаблон findstr
с \\
потерпит неудачу.
Это не удастся: dir /b "*.txt"|findstr /R "\\........$"
Когда это будет успешно: dir /b "*.txt"|findstr /R "^........$"
Как и в случае с командой dir
которая выдает результат, когда слово шаблона поиска находится в конце строки, разделенной конечной косой чертой, также произойдет сбой.
Как это будет терпеть неудачу: dir /b /s "*.txt"|findstr /R "^........$"
но это увенчается успехом: dir /b /s "*.txt"|findstr /R "\\........$"