在Windows怪异中使用perl

时间:2011-05-04 13:12:07

标签: perl batch-file

我有windows bat文件,(使用activeperl)

@echo off
perl -p -e 's/DIV\[/div\[/g' orginal.txt > output.txt
perl -p -e 'rename("output.txt", "orginal.txt")';
...

运行.bat文件,我不能让它正常运行..

Can't open ;: No such file or directory, <> line 12248.
Can't find string terminator "'" anywhere before EOF at -e line 1.

不确定我做错了什么..

3 个答案:

答案 0 :(得分:4)

您不能使用单引号将Windows中的Perl代码括起来。因此,您需要转义双引号或查找其他替代选项,例如qq(...)

perl -pe "s/DIV\[/div\[/g" original.txt > output.txt
perl -pe "rename(qq(output.txt), qq/original.txt/)"

请注意,在这种情况下,rename的参数可以只是rename('a.txt', 'b.txt'),因为它们是文字,不需要变量插值。

答案 1 :(得分:1)

您应该使用双引号引用Windows cmd下的程序文本。在您的示例中,您只需旋转双引号和单引号即可。如果您确实需要在perl文本中使用双引号,请改用qq {....}。

答案 2 :(得分:1)

其他海报是正确的:Windows要求perl的-e脚本使用双引号,这通常会搞砸。不过,您还可以做一件事:使用-i开关,如下所示:

@echo off
perl -pi.bak -we "s/DIV\[/div\[/g" original.txt

-i.bak开关将编辑文件 - 不需要重命名 - 并且它将在“original.txt.bak”中存储文件的备份。如果您不想备份,请删除“.bak”部分,然后使用-pi