2011-08-02 9 views
4

は巣への可能性は2つのforfileのコマンドがありますか?ネストされたforfiles:私は<strong>パス名</strong>によっておよび<strong>延長</strong>でフィルタリングしてからのみ、二重フィルタのファイル上でコマンドを実行できるように、パスと拡張子フィルタ

例として、すべてのユーザーのすべてのOutlook HTML署名を取得したいとします。私は

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

によってこれを行うことができます。しかし、それはcmd /c echo @fileを呼び出すためにforfilesのデフォルトの動作ですので、これはファイル名のみが表示されます。

その後、私は二重引用符で結果を引用符でコマンドを設定する必要があり、内側forfilesコマンドで/c -optionを設定する必要があると思いますので、これは動作しません変更:

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

どのようにすることができます内部引用符をエスケープするか、またはパスとファイル拡張子の部分文字列でフィルタリングされたすべてのファイルに対してコマンドを実行するために、いくつかの異なるアプローチを使用しますか?

種類が
sc911

[編集]については、次の2つのネストされたFORコマンドを使用することができます[/編集]

答えて

2

FORFILESに含む骨格と、このコードを使用することができるように思わ参照します内側をエスケープする方法として\"を認識してください"。だから、次のように動作するはずです:

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

私はそれらすべて、それらの少し、厄介なエスケープ文字を試したと思った... Thxたくさん! – sc911

7

代わりのforfiles再帰的に検索するため/sを忘れてしまいました。

は、以下のワンライナーの例では、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 
) 
) 
+0

Thxをし、これはあまりにもトリックを行いますが、私はsc911 @ forfiles – sc911

+0

に固執したいのですが、このソリューションは、 'とはるかに速い' FORFILES'を使用するよりも、あなたのファイルを処理しますCMD.exe'。 – Squashman

関連する問題

 関連する問題