"と'の違いですが、cmd.exe では ' 特殊文字ではありません。for /f 文のある形式で意味を持つだけでそれ以外の場所では#+-/などと同じ普通の文字です。unixのシェルとは全然違います。 まず質問文の >findstr "\"!" a.txt >b.txt ですが、\ はfindstrが正規表現の特殊文字として扱うだけでCMDの構文解析では普通文字なので、"\"が引用符に囲まれた文字列として扱われます。次の!は引用符の外の文字。次の " a.txt >b.txtが、(終りの引用符の欠けた)引用符に囲まれた文字列とみなされますので、リダイレクト記号は引用符の中となり効きません。 >OKだったもの >findstr ^"\^"!^" a.txt >findstr \^"! a.txt ^を前置した"は引用符としての意味を失い、そのまま"がfindstrにわたされます。リダイレクト
![DOSコマンドのダブルクォーテーションの扱い](https://cdn-ak-scissors.b.st-hatena.com/image/square/96b6f7e41f80711497997e6f0a65ab362eda9904/height=288;version=1;width=512/https%3A%2F%2Foshiete.xgoo.jp%2Fimages%2Fsp%2Fqa_recommend%2F2101_3.jpg)