10

findstr.exe を使用しているときに検索文字列の引用符を正しくエスケープするにはどうすればよいですか?

例:

findstr /misc:"namespace=\"" *.cs > ns.txt

これは、指定したファイルではなく、コンソールに出力されます。

実際にはバッチファイルではなく、コマンドラインで直接これを行っていますが、その情報も役立つ場合があります。

4

4 に答える 4

8

私が間違っている場合は訂正してください、しかし私はそれを理解したと思います:

findstr.exe /misc:^"namespace=\^"^" *.cs > ns.txt

これにより、検索文字列にスペースが含まれている場合でも、正しい出力が得られるようです。これにより、同じfindstr.exe呼び出しでのファイルのリダイレクト、パイピング、および追加のリテラルが正しく機能するようになります。

cmd.exeとfindstr.exeの両方に文字の特別な処理があるため、私の質問の元のコマンドは機能しません"。cmd.exeの処理で、一致しない引用符のセットができてしまいました。

私の回答の新しいコマンドは^"、引用符をcmd.exeからfindstr.exeに渡すことができ、\"コマンド処理の目的でその引用符を無視して文字リテラルとして扱うようにfindstr.exeに指示するために機能します。

編集

まあ、私の解決策は正しかったが、それが正しい理由は完全に間違っていた。私はそれをテストするための小さなプログラムを書きました。

不正なコマンドラインを渡すと、cmd.exeがこの入力をプログラムに渡すことがわかりました。

test.exe /misc:namespace=" *.cs > ns.txt

文字が正しくエスケープされると、cmd.exeはこの入力をプログラムに渡します(そして出力をファイルにリダイレクトします)。

test.exe /misc:namespace=" *.cs
于 2011-02-13T07:04:55.907 に答える
5

ファウンドリ: FINDSTRは、引用符を検索し、出力をリダイレクト/パイプします

Try this: 

findstr > x.txt /S /I /M /C:"\.\"" * 

なぜこれが機能するのかわかりません。

ただし、出力の配管には使用できません。関連するリンク配管findstrの出力を参照してください

于 2011-02-13T07:03:01.450 に答える
4

私のテストによると、正しいエスケープ文字はバックスラッシュです:

c:\Temp>findstr /isc:"session id=\"59620\"" C:\Temp\logs\some*.xml
C:\Temp\logs\some_2016_11_03.xml: <session id="59620" remoteAddress="192.168.195.3:49885"/>
于 2016-11-04T12:41:09.493 に答える
1

これだけで十分ではないでしょうか:

findstr /misc:namespace=^" *.cs > ns.txt

?

編集

引用符で囲まれたパラメーター内で文字を渡す方法を探していた場合"、それは(あなたの例を使用して)

findstr /misc:"namespace=""" *.cs > ns.txt

("文字は、引用符で囲まれた文字列内で 2 回繰り返されます)。

于 2011-02-13T12:24:09.157 に答える