在 Windows 中使用 Perl 的怪事

发布于 2024-11-05 04:48:31 字数 394 浏览 0 评论 0原文

我有 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.

不知道我做错了什么..

I've got windows bat file, (using activeperl)

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

Running a .bat file, and I just cant get it to run properly..

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

Not sure what I'm doing wrong..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

緦唸λ蓇 2024-11-12 04:48:31

在 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') 因为它们是文字并且没有变量插值必需的。

You can't use single-quotes to enclose the Perl code in Windows. As a result, you need to escape the double-quotes or find other alternatives, such as qq(...).

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

Note that in this case, the arguments to rename can simply be rename('a.txt', 'b.txt') since they are literals and no variable interpolation is required.

仅此而已 2024-11-12 04:48:31

在 Windows cmd 下应该使用双引号来引用程序文本。在您的示例中,您可以只交换双引号和单引号。如果您确实需要在 Perl 文本中使用双引号,请使用 qq{ .... } 代替。

You ought to use double quotes to quote the program text under Windows cmd. In your example, you can just swiztch double and single quotes. In cases where you really need double quotes in the perl text, use qq{ .... } instead.

人事已非 2024-11-12 04:48:31

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

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

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

The other posters are correct: windows requires double quotes for -e scripts to perl, which often screws things up. There is one more thing you can do, though: Use the -i switch, like this:

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

The -i.bak switch will edit the file in place - no rename required - AND it will store a backup of the file in "original.txt.bak". If you do not want a backup, remove the ".bak" part and just use -pi.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文