【问题标题】:How do I protect quotes in a batch file?如何保护批处理文件中的引号?
【发布时间】:2010-09-12 22:36:08
【问题描述】:

我想将Perl one-liner 包装在一个批处理文件中。对于一个(微不足道的)示例,在 Unix shell 中,我可以引用如下命令:

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

但是 DOS 用这个有用的错误消息阻止了这一点:

在 -e 第 1 行的 EOF 之前的任何地方都找不到字符串终止符“'”。

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

【问题讨论】:

    标签: perl batch-file quotes


    【解决方案1】:

    对于 Windows 上的 Perl 内容,我尝试尽可能多地使用泛化引用,以免出现倾斜牙签综合症。我为 DOS 需要的东西保存引号:

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

    如果您只需要在打印结束时换行,您可以让-l 开关为您完成:

    perl -le "print scalar localtime()"
    

    有关您可以使用开关做的其他很酷的事情,请参阅perlrun 文档。

    【讨论】:

      【解决方案2】:

      在 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的评论。

      【讨论】:

      • 很好的答案,只是比我接受的那个好一点。谢谢!
      • perl -le "print localtime()" -- 打印 '2625625810842681' 而不是 'Thu Sep 25 06:25:26 2008', perl -E"say scalar localtime
      • 这也有效 [may print "Tue Aug 4 02:54:07 2009"]: perl -le "print scalar localtime()"
      【解决方案3】:

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

      perl -e "print localtime();"
      

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          对于 Windows NT+ 下的一般批处理文件,^ 字符会转义很多东西 (|&),但对于引号,将它们加倍会产生奇迹:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-11-23
            • 1970-01-01
            • 1970-01-01
            • 2018-07-17
            • 2011-04-20
            • 2014-12-25
            • 1970-01-01
            相关资源
            最近更新 更多