Я пытаюсь создать файл, который имеет список каталогов, которые имеют определенное имя файла в них.
Скажем, я пытаюсь найти каталоги, которым назвали файл *.joe
в них. Я первоначально попробовал просто простое dir /ad *.joe > dir_list.txt
, но это ищет имена каталогов *.joe
, таким образом, никакие не идут.
Затем я пришел к заключению, что для цикла был, вероятно, мой лучший выбор. Я запустил с
for /d /r %a in ('dir *.joe /b') do @echo %a >> dir_list.txt
и было похоже, что это не выполняло команду dir. Я добавил "usebackq", но это, кажется, только работает на/F, управляют расширением.
Идеи?
Поскольку « dir / s / b имя_файла
» не сокращает его, как насчет следующего
for /d /r %a in (*) do @if exist %a\*.scr (echo %a)
Похоже, что внутри командного файла единственное, что нужно сохранить, - это% дающий
for /d /r %%a in (*) do @if exist %%a\*.scr (echo %%a)
Сохраните это в search.bat
или (что-нибудь еще, что вы можете вспомнить)
@echo off
setlocal EnableDelayedExpansion
set last=?
if "%1" EQU "" goto usage
for /f %%I in ('dir /s /b /o:n /a-d "%1"') do (
if !last! NEQ %%~dpI (
set last=%%~dpI
echo !last!
)
)
goto end
:usage
echo Please give search parameter.
:end
и используйте следующим образом:
search.bat *.joe >dir_list.txt
Примечание что он ищет в текущем контексте пути. Вы можете добавить .bat
в место, которое находится в ПУТЬ
, чтобы вы могли вызывать его из любого места.
Это напечатает каталог и имя файла, может быть полезно, а может и нет:
dir /b /s | findstr "\.joe"
findstr
использует регулярное выражение.
dir / s / b * .joe >> dir_list.txt
, а затем скрипт, например, gawk, чтобы избавиться от имен файлов после dirnames