2016-04-14 17 views
0

Ich habe Schwierigkeiten zu verstehen, wie Sonderzeichen angeben ^ und " als Parameter in Windows-Eingabeaufforderung. ich gnuwin32 die diff in Win 7 verwenden. Es hat a. -I Option, die einen regulären Ausdruck aus der Befehlszeile akzeptiert ich möchte diff in einer Batch-Datei aufzurufen, einen regulären Ausdruck spezifizieren jedoch meine reguläre Ausdruck komplex mit ^ " und white-space Sonderzeichen in ihm ist.Wie^"white-space in der gleichen Zeit in Windows-Befehl zum Angeben Prompt

^[ \t]*#[ \t]*include[ \t]+"c:\\program files 

Ich kann Wind nicht verstehen Die Regeln von ows zur Angabe von Sonderzeichen in der Kommandozeile in diesem Fall, die spezielle Regeln bezüglich ^ und " haben. Wie soll ich den obigen regulären Ausdruck in der Befehlszeile angeben?

Ich denke, es sollte wie folgt aussehen:

diff -I "^[ \t]*#[ \t]*include[ \t]+"c:\\program files" file1 file2 

Aber die " in der Mitte Chaos das Ganze auf. Wie soll ich mit den ^ und " umgehen?

+0

echo ^^ [\ t] * # [\ t] * include [\ t] + "c: \\ program files \" würde zu Ihrer Zeichenfolge passen oder versuchen, sie unverändert zu übergeben. –

+0

nein, Ich muss diff.exe die obige Zeichenfolge als Argument in der Befehlszeile eingeben: diff -I^[... "... file1 file2. Dies wird fehlschlagen, wenn ich es einfach in die Eingabeaufforderung eintippe, da es^"und Leerzeichen enthält, was spezielle Sequenzen erfordert, die ich nicht verstehen kann, wie man sie in Windows spezifiziert (die Regeln sind für mich zu komplex und inkonsistent)) – JavaMan

+0

Peter

Antwort

0

Nach einigen Recherchen und Tests, sollte dies die Regex erforderlich sein:

diff -I "^[[:space:]]*#[[:space:]]*include[[:space:]]\+\"c:\\\\program file" file1 file2 

Für eine Sache, diffgrep Stil regex verwendet, die nicht die Perl-Stil \t Sequenz unterstützt. Wir müssen \" verwenden, um ein Literal " anzugeben.

Verwenden Sie auch keine Windows-Batchdatei, um den an ein Programm übergebenen Parameter zu testen, wie ich es getan habe.

Mit anderen Worten, nie denken, diese Batch-Datei diff.bat mit einigen echo s können Sie testen können, welche Zeilenargumente Befehl zu verwenden:

echo %1 
echo %2 
echo %3 
echo %4 

Schreiben und ein Programm für diese kompilieren und haben es den Befehl Dump Zeilenargumente.

+0

Beachten Sie, dass, da es die Anwendung ist, die die Befehlszeile in Token analysiert (oder nicht), gibt es keine Garantie, dass Anwendung A die gleichen Token wie Anwendung B erzeugt. In diesem Fall verwendet gnuwin32 wahrscheinlich Microsoft C-Laufzeit-Parser (obwohl dies wahrscheinlich nicht die beste Wahl war!), Also ist das Schreiben eines eigenen C-Programms die geeignete Option In anderen Fällen müssen Sie möglicherweise Raten verwenden, oder konsultieren Sie den Quellcode oder die Dokumentation des Herstellers –

+0

Oh, eine weitere Komplikation: Das Caret ist das Zitatzeichen von cmd.exe, aber wie alle Sonderzeichen gilt es nur außerhalb von Anführungszeichen. Das Caret in der Zeichenfolge, die Sie angezeigt haben, wird also wörtlich genommen, weil es zwischen den ersten beiden doppelten Anführungszeichen steht. Wenn Sie nach dem zweiten Anführungszeichen ein Caret setzen müssten, müssten Sie es verdoppeln. –