вложенные файлы: фильтр путей и расширений - PullRequest
4 голосов
/ 02 августа 2011

есть ли возможность вложить две команды forfile, чтобы я мог фильтровать по pathname и по расширению , а затем выполнять команду только для этих файлов с двойной фильтрацией?

В качестве примера я хотел бы получить все HTML-подписи Outlook всех пользователей. Я могу сделать это по

forfiles /s /p c:\Users /m *Signatures* /c "cmd /c forfiles /s /p @path /m *.htm"

Но это будет отображать только имена файлов, потому что по умолчанию forfiles вызывает cmd /c echo @file.

Изменение этого не работает, потому что тогда мне нужно установить опцию /c во внутренней команде forfiles, которая требует установки команды в кавычках, что приводит к двойным кавычкам:

forfiles /s /p c:\Users /m *Signatures* /c "cmd /c forfiles /s /p @path /m *.htm /c "cmd /c echo @path""

Как я могу избежать внутренних кавычек или использовать какой-то другой подход для запуска любой команды для всех файлов, отфильтрованных по подстроке пути и расширению файла?

С уважением
sc911

[править] забыл /s для рекурсивного поиска [/ править]

Ответы [ 2 ]

7 голосов
/ 02 августа 2011

Вместо forfiles вы можете использовать две вложенные команды FOR.

см. Следующий пример с одной строкой для проверки в приглашении cmd

@for /d %d in (c:\Users\*signature*) do @for %f in (%d\*.htm) do @echo %f

и использовать этот код в качестве каркаса для включения в файл BAT

for /d %%d in (c:\Users\*signatures*) do (
  for %%f in (%%d\*.htm) do (
    echo %%f
  )
)  
2 голосов
/ 03 августа 2011

FORFILES, кажется, может распознать \" как способ избежать внутреннего "Итак, должно работать следующее:

forfiles /p c:\Users /m *Signatures* /c "cmd /c forfiles /p @path /m *.htm /c \"cmd /c echo @path\""
...