Frage

Ich möchte ein Perl Einzeiler in einer Batch-Datei . Für eine (triviale) beispielsweise in einer Unix-Shell, konnte ich einen Befehl wie diesen zitieren nach oben:

perl -e 'print localtime() . "\n"'

Aber DOS Drossel auf, dass mit dieser hilfreichen Fehlermeldung:

  

Kann nicht String-Terminator "'" überall vor EOF auf -er Linie 1 finden.

Was ist der beste Weg, dies innerhalb eines .bat Datei ?

War es hilfreich?

Lösung

Für Perl Sachen auf Windows, ich versuche, die verallgemeinerte zitieren so viel wie möglich zu verwenden, so kann ich nicht Zahnstocher Syndrom gelehnt. Ich spare die Angebote für die Sachen, die DOS benötigt:

perl -e "print scalar localtime() . qq(\n)"

Wenn Sie nur eine neue Zeile am Ende des Drucks benötigen, können Sie den -l Schalter lassen das für Sie tun:

perl -le "print scalar localtime()"

Für andere coole Dinge, die Sie mit den Schaltern tun können, finden Sie in der perlrun Dokumentation.

Andere Tipps

In Windows' ‚DOS-Eingabeaufforderung‘ (cmd.exe) Sie müssen doppelte Anführungszeichen nicht einfache Anführungszeichen verwenden. Für in dem Perl-Code angegeben, gibt Ihnen Perl eine Menge von Optionen. Drei sind:

perl -e "print localtime() . qq(\n)"
perl -e "print localtime() . $/"
perl -le "print ''.localtime()"

Wenn Sie Perl 5.10 oder höher:

perl -E "say scalar localtime()"

Dank J. F. Sebastian 's Kommentar.

Für allgemeine Batch-Dateien unter Windows NT +, das Zeichen ^ entkommt viele Dinge (<> | &), aber für Zitate, sie wirkt Wunder verdoppelt:

C:\>perl -e "print localtime() . ""\n"""
Thu Oct  2 09:17:32 2008

Zuerst jede Antwort, die Sie dazu bekommen, ist befehlsspezifische, weil die DOS-Shell nicht die Befehlszeile nicht analysieren, wie ein uniq man tut; Er übergibt den gesamten unparsed Zeichenfolge an den Befehl, die jede Spaltung der Fall ist. Das heißt, bei Verwendung von / Subsystem. Tröstete die C-Laufzeit Spaltung vor dem Aufruf von main () zur Verfügung stellt und die meisten Befehle verwenden diese

Wenn eine Anwendung dieser Spaltung verwendet, Sie die Art und Weise ein wörtliches doppelten Anführungszeichen eingeben, besteht darin, zu verdoppeln. Also würden Sie tun

perl -e "print localtime() . ""\n"""

In DOS, verwenden Sie die "" um Ihre Perl-Befehl. Die DOS-Shell nicht tun einfache Anführungszeichen wie die normale Unix-Shell:

perl -e "print localtime();"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top