Pregunta

Quiero envolver un Perl one-liner en un archivo por lotes . Para un ejemplo (trivial), en un shell de Unix, podría citar un comando como este:

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

Pero DOS se ahoga con eso con este útil mensaje de error:

  

No se puede encontrar el terminador de cadena " '" en cualquier lugar antes de EOF en -e línea 1.

¿Cuál es la mejor manera de hacer esto dentro de un .bat file ?

¿Fue útil?

Solución

Para las cosas de Perl en Windows, trato de usar la cita generalizada tanto como sea posible para no tener el síndrome del palillo inclinado. Guardo las comillas para las cosas que DOS necesita:

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

Si solo necesita una nueva línea al final de la impresión, puede dejar que el interruptor -l lo haga por usted:

perl -le "print scalar localtime()"

Para otras cosas interesantes que puede hacer con los interruptores, consulte la documentación perlrun .

Otros consejos

En Windows '" símbolo del sistema DOS " (cmd.exe) necesita usar comillas dobles, no comillas simples. Dentro del código Perl citado, Perl le ofrece muchas opciones. Tres son:

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

Si tiene Perl 5.10 o más reciente:

perl -E "say scalar localtime()"

Gracias a J.F. Comentario de Sebastian .

Para archivos por lotes generales en Windows NT +, el carácter ^ escapa a muchas cosas (< > | & amp;), pero para las citas, duplicarlas hace maravillas:

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

Primero, cualquier respuesta que obtenga es específica del comando, porque el shell de DOS no analiza la línea de comando como lo hace uniq; pasa toda la cadena no analizada al comando, que realiza cualquier división. Dicho esto, si usa / subsystem: console, el tiempo de ejecución C proporciona división antes de llamar a main (), y la mayoría de los comandos usan esto.

Si una aplicación está utilizando esta división, la forma en que escribe una comilla doble literal es duplicándola. Entonces lo harías

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

En DOS, usa " " alrededor de su comando Perl. El shell de DOS no hace comillas simples como el shell normal de Unix:

perl -e "print localtime();"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top