我有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.
不确定我做错了什么..
答案 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
。