我想在批处理文件中包含 Perl one-liner 。对于(平凡的)示例,在Unix shell中,我可以引用如下命令:

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

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

  

找不到字符串终结符<!>“;”<!>; EOF之前的任何地方-e第1行。

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

有帮助吗?

解决方案

对于Windows上的Perl内容,我尝试尽可能多地使用广义引用,这样我就不会得到倾斜的牙签综合症。我保存了DOS所需内容的引号:

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

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

perl -le "print scalar localtime()"

对于您可以使用开关执行的其他很酷的操作,请参阅 perlrun 文档。

其他提示

在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.塞巴斯蒂安的评论。

对于Windows NT +下的常规批处理文件,^字符会逃避很多事情(<!> lt; <!> gt; | <!> amp;),但是对于引号来说,将它们加倍会产生奇迹:

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

首先,你得到的任何答案都是特定于命令的,因为DOS shell不像uniq那样解析命令行;它将整个未解析的字符串传递给命令,该命令执行任何拆分。也就是说,如果使用/ subsystem:console,C运行时会在调用main()之前提供拆分,大多数命令都会使用它。

如果应用程序正在使用此拆分,则键入文字双引号的方式是将其加倍。所以你要做

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

在DOS中,您使用<!>“; <!>”;围绕你的Perl命令。 DOS shell不像普通的Unix shell那样做单引号:

perl -e "print localtime();"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top