如何保护批处理文件中的引号?

Jef*_*rom 5 quotes perl batch-file

我想在批处理文件中包装一个Perl单行程序.对于(平凡的)示例,在Unix shell中,我可以引用如下命令:

perl -e 'print localtime() . "\n"'
Run Code Online (Sandbox Code Playgroud)

但DOS使用这个有用的错误消息扼杀了它:

在-e第1行的EOF之前的任何地方都找不到字符串终结符"'".

.bat文件中执行此操作的最佳方法是什么?

bri*_*foy 13

对于Windows上的Perl内容,我尝试尽可能多地使用广义引用,因此我不会因为牙签综合征而感到厌恶.我保存了DOS所需内容的引号:

perl -e "print scalar localtime() . qq(\n)"
Run Code Online (Sandbox Code Playgroud)

如果您只需要在打印结束时使用换行符,您可以让-l开关为您执行此操作:

perl -le "print scalar localtime()"
Run Code Online (Sandbox Code Playgroud)

有关交换机可以执行的其他很酷的事情,请参阅perlrun文档.


tye*_*tye 8

在Windows的"DOS提示符"(cmd.exe)中,您需要使用双引号而不是单引号.对于引用的Perl代码,Perl为您提供了很多选择.三是:

perl -e "print localtime() . qq(\n)"
perl -e "print localtime() . $/"
perl -le "print ''.localtime()"
Run Code Online (Sandbox Code Playgroud)

如果您有Perl 5.10或更新版本:

perl -E "say scalar localtime()"
Run Code Online (Sandbox Code Playgroud)

感谢JF Sebastian的评论.