我想在批处理文件中包含Perl one-liner。对于(平凡的)示例,在Unix shell中,我可以引用如下命令:
perl -e 'print localtime() . "\n"'
但DOS使用这个有用的错误消息扼杀了它:
在-e第1行的EOF之前的任何地方找不到字符串终结符。
在.bat file内完成此操作的最佳方式是什么?
答案 0 :(得分:13)
对于Windows上的Perl内容,我尝试尽可能多地使用广义引用,这样我就不会得到倾斜的牙签综合症。我保存了DOS所需内容的引号:
perl -e "print scalar localtime() . qq(\n)"
如果您只需要在打印结束时使用换行符,则可以让-l
开关为您执行此操作:
perl -le "print scalar localtime()"
对于您可以使用开关执行的其他很酷的操作,请参阅perlrun文档。
答案 1 :(得分:8)
在Windows“DOS提示符”(cmd.exe)中,您需要使用双引号而不是单引号。对于引用的Perl代码,Perl为您提供了很多选择。三是:
perl -e "print localtime() . qq(\n)"
perl -e "print localtime() . $/"
perl -le "print ''.localtime()"
如果你有Perl 5.10或更新版本:
perl -E "say scalar localtime()"
感谢J.F. Sebastian的评论。
答案 2 :(得分:2)
对于Windows NT +下的常规批处理文件,^字符会转义大量内容(<> |&),但对于引号,将它们加倍会产生奇迹:
C:\>perl -e "print localtime() . ""\n"""
Thu Oct 2 09:17:32 2008
答案 3 :(得分:1)
在DOS中,您使用Perl命令周围的“”。 DOS shell不像普通的Unix shell那样做单引号:
perl -e "print localtime();"
答案 4 :(得分:1)
首先,你得到的任何答案都是特定于命令的,因为DOS shell不像uniq那样解析命令行;它将整个未解析的字符串传递给命令,该命令执行任何拆分。也就是说,如果使用/ subsystem:console,C运行时会在调用main()之前提供拆分,大多数命令都会使用它。
如果应用程序正在使用此拆分,则键入文字双引号的方式是将其加倍。所以你要做
perl -e "print localtime() . ""\n"""