Question

Je souhaite insérer un Perl one-liner dans un fichier de traitement par lots . Pour un exemple (trivial), dans un shell Unix, je pourrais citer une commande comme celle-ci:

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

Mais DOS étouffe cela avec ce message d'erreur utile:

  

Impossible de trouver le terminateur de chaîne " '" n'importe où avant EOF à -e ligne 1.

Quel est le meilleur moyen de le faire dans un fichier .bat ?

Était-ce utile?

La solution

Pour le contenu Perl sous Windows, j’essaie d’utiliser autant que possible les citations généralisées afin de ne pas contracter le syndrome du cure-dent penché. Je sauvegarde les guillemets pour les éléments nécessaires au DOS:

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

Si vous avez simplement besoin d'une nouvelle ligne à la fin de l'impression, vous pouvez laisser le commutateur -l le faire pour vous:

perl -le "print scalar localtime()"

Pour plus d’activités intéressantes avec les commutateurs, consultez la perlrun documentation.

Autres conseils

Dans Windows & "; invite DOS &"; (cmd.exe), vous devez utiliser des guillemets doubles et non des guillemets simples. Pour l'intérieur du code Perl cité, Perl vous donne beaucoup d'options. Trois sont:

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

Si vous utilisez Perl 5.10 ou une version plus récente:

perl -E "say scalar localtime()"

Merci à J.F. Le commentaire de Sebastian .

Pour les fichiers batch généraux sous Windows NT +, le caractère ^ échappe à beaucoup de choses (< > | & amp;)), mais pour les guillemets, les doubler fonctionne à merveille:

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

Tout d’abord, toute réponse à cette question est spécifique à une commande, car le shell DOS n’analyse pas la ligne de commande comme un uniq; il passe la chaîne entière non analysée à la commande, qui effectue le fractionnement. Cela dit, si vous utilisez / subsystem: console, le moteur d’exécution C fournit un fractionnement avant d’appeler main (), ce que la plupart des commandes utilisent.

Si une application utilise ce fractionnement, vous devez saisir un double guillemet littéral en le doublant. Alors tu ferais

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

Sous DOS, vous utilisez le " " autour de votre commande Perl. Le shell DOS ne fait pas de guillemets simples comme le shell Unix normal:

perl -e "print localtime();"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top