Пакетный файл Windows для просмотра папок, в которых есть определенный файл - PullRequest
4 голосов
/ 23 апреля 2010

Я пытаюсь создать файл со списком каталогов, в которых есть определенное имя файла.

Допустим, я пытаюсь найти каталоги, в которых есть файл с именем *.joe. Сначала я попробовал просто dir /ad *.joe > dir_list.txt, но он ищет в именах каталогов *.joe, так что не стоит.

Тогда я пришел к выводу, что цикл for был, вероятно, моим лучшим выбором. Я начал с

for /d /r %a in ('dir *.joe /b') do @echo %a >> dir_list.txt

и похоже, что он не выполняет команду dir. Я добавил «usebackq», но, похоже, это работает только для расширения команды / F.

Идеи

Ответы [ 4 ]

4 голосов
/ 23 апреля 2010

Так как "dir /s /b file_name" не обрезает его, как насчет следующего

for /d /r %a in (*) do  @if exist %a\*.scr (echo %a)

Может показаться, что внутри пакетного файла единственное, что нужно скрыть - это%, выдаваемый

for /d /r %%a in (*) do  @if exist %%a\*.scr (echo %%a)
1 голос
/ 23 апреля 2010

При этом будет напечатан каталог и имя файла, которые могут вам пригодиться или не быть полезны:

dir /b /s | findstr "\.joe"

findstr использует регулярное выражение.

1 голос
/ 23 апреля 2010

Сохраните это в 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 в местоположение, которое находится в PATH, так что вы можете позвонить из любого места.

0 голосов
/ 23 апреля 2010

dir /s/b *.joe >> dir_list.txt, а затем сценарий, например, Gawk, чтобы избавиться от имен файлов после dirnames

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...