Pergunta

Eu quero embrulhar um Perl one-liner em um arquivo de lote . Para um exemplo (trivial), em um shell Unix, eu poderia citar-se um comando como este:

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

Mas bobinas DOS em que, com esta mensagem de erro útil:

Não é possível localizar terminator string """ em qualquer lugar antes EOF na linha -e 1.

Qual é a melhor maneira de fazer isso dentro de um .bat ?

Foi útil?

Solução

Para coisas Perl no Windows, eu tento usar a citação generalizada, tanto quanto possível para que eu não fique inclinada síndrome palito. Eu salvar as cotações para o material que DOS necessita:

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

Se você só precisa de uma nova linha no final da impressão, você pode deixar o interruptor -l fazer isso para você:

perl -le "print scalar localtime()"

Para outras coisas legais que você pode fazer com switches, consulte a documentação do perlrun .

Outras dicas

No Windows' prompt do DOS "(cmd.exe), você precisa usar aspas duplas não aspas simples. Por dentro do código Perl citado, Perl dá-lhe um monte de opções. Três são:

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

Se você tem Perl 5.10 ou mais recente:

perl -E "say scalar localtime()"

Graças a J.F. comentário Sebastian 's.

Para arquivos gerais de lote no Windows NT +, o personagem ^ escapa muitas coisas (<> | &), mas para cotações, dobrando-los faz maravilhas:

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

Em primeiro lugar, qualquer resposta que você chegar a este é específico do comando, porque o shell DOS não analisa a linha de comando como um uniq faz; ele passa toda a cadeia não analisada ao comando, que não faz qualquer divisão. Dito isto, se usando / subsistema: consolar o tempo de execução C fornece divisão antes de chamar main (), ea maioria dos comandos usam este

.

Se um aplicativo está usando essa divisão, a maneira que você digite um double-quote literal é dobrando-lo. Então você faria

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

Em DOS, você usa o "" em torno de seu comando Perl. é que o shell DOS não aspas simples como o shell normal Unix:

perl -e "print localtime();"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top