Escaping-backslash in-Batch-Datei mit FINDSTR
In meinem svn-Pre-commit-hooks, die ich verwenden findstr zum blockieren bestimmter Dateitypen beign begangen.
Ich möchte nun erweitern Sie diese um Verzeichnisse, die in der ersten Instanz \obj\ Verzeichnisse aber ich habe Probleme mit dem Regulären Ausdruck und die Flucht des \ der dir
Derzeit habe ich
"C:\Program Files\VisualSVN Server\bin\svnlook.exe" changed -t %2 %1 | FindStr /R ".obj\\\"
IF %ERRORLEVEL% EQU 1 GOTO OK
echo "obj directories cannot be committed" >&2
exit 1
:OK
exit 0
habe ich versucht nur mit \ am Ende, aber das scheint zu entkommen, der doppelten Anführungszeichen?
Irgendwelche Ideen?
InformationsquelleAutor Dean | 2009-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Empirisch einen der folgenden Befehle macht, was man will:
Da Sie angegeben
/R
Sie auch müssen Sie einen umgekehrten Schrägstrich vor den.
denn es wird anders interpretiert als ein Platzhalter.Seite Hinweis: es scheint aus meinen tests, die findstr.exe verwendet die etwas seltsamen quoting-Regeln von MS - C-Bibliothek, beschrieben auf Die website von Microsoft. In diesem besonderen Fall die relevante Regel ist die, die erwähnen, dass eine double-quote-Zeichen vorangestellt ist eine gerade Anzahl von backslashes interpretiert werden halb so viele backslashes. (Ja, es ist seltsam, und es wird seltsamer, wenn man bedenkt, dass cmd.exe behandelt werden doppelte Anführungszeichen speziell zu Zitieren... die Dinge richtig auf die Windows-Welt ist eine Welt der Schmerzen, ehrlich gesagt.)
InformationsquelleAutor j_random_hacker
In einem regexp, backslash sollte das doppelte entgangen zu sein, richtig interpretiert in eine String-regex:
Aber in deinem Fall, da dein regex sollte passen beide
.obj
Dateien und "obj
" Verzeichnisse würde ich vorschlagen:weil Ihre ursprünglichen regex ("
.obj\\
") würde nur erkannt haben ".obj
" - Verzeichnis, nicht "obj
". Damit die '?
'Da '.' bedeutet, dass alle Zeichen, die Sie auch brauchen "
\\
", bevor es zu einer änderung Ihrer Auslegung.Stimmt, ich habe aktualisiert die Antwort
Sie nicht testen, das haben Sie. Der backslash vor dem "." muss ein einzige backslash, und die 4 backslashes am Ende werden 2 wenn Sie fügen Sie ein "?" vor der abschließenden double-quote. Das zitieren Regeln ziemlich seltsam, ich Sie gewähren.
Habe ich nicht getestet, in der Tat 😉 Das ist der Grund, warum ich von Ihnen positiv bewertet werden Ihr Antwort
InformationsquelleAutor VonC
Was ist der Fehler, den du bekommen?
Dies kann ein red herring sein, aber SVN verwendet
/
als der Pfad, seperator, was einige Probleme unter Windows. Ich hatte, um das folgende in meinem hook-Skripte zu ändern/
zu\
:InformationsquelleAutor Patrick Cuff
Ich löste dies mit den folgenden.
Warum nutzt du nicht %VISUALSVN_SERVER% - Umgebungsvariable?
InformationsquelleAutor Dean
Braucht man eigentlich einen regulären Ausdruck in diesem Fall? Wenn Sie gerade auf der Suche nach dem Teilstring "\obj\" /C anstatt /R zu behandeln, den text als eine wörtliche übereinstimmung string:
InformationsquelleAutor bobbymcr