gpt4 book ai didi

regex - 运行 groovy 时 Windows CMD 的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 13:34:42 33 4
gpt4 key购买 nike

我有一个 groovy 脚本,可以重命名与正则表达式匹配的文件我是这样启动的

C:\>groovy rename test.* test.txt

它工作正常。

但是当我尝试传递这个正则表达式时:

C:\>groovy rename test\.(.*) $1_TEST_$1

命令行返回一条消息:

命令语法不正确

这不是我的脚本 - 它的 cmd 写了这个。我的脚本甚至从未运行过。即使我将参数(正则表达式)用引号引起来也会发生这种情况。

问:为什么?如何将任何正则表达式作为参数传递?


由于没有人知道发生了什么,我举了一个更简单的例子:

测试.groovy

println args[0]

我运行它:groovy test Bob 不出所料,输出是 Bob。但是当我运行时groovy test .* 我得到The syntax of the command is incorrect。当我运行它时 groovy test * 然后会出现一个 pdf 文件的名称(恰好与 test.groovy 在同一个目录中)

最佳答案

好的,这似乎是 startgroovy.bat 批处理文件中的错误。错误发生在这里:

rem remove the leading space we'll add the first time
if "x%_ARG:~0,1%" == "x " set _ARG=%_ARG:~1%

但问题是之前的几行:

rem remove quotes around first arg
for %%i in (%1) do set _ARG=%_ARG% %%~i

如果参数包含通配符,这将无法按预期工作。某些情况(包括单个星号)在脚本的早期解决了,而其他一些工作则因为通配符匹配成功;在这种情况下,您不会收到错误,但匹配文件会传递给 Groovy 脚本而不是通配符。在某些情况下,通配符会匹配但由于变通方法破坏了它而不匹配。

据我所知,目的是不处理通配符,因此修复很简单:

rem remove quotes around first arg
for /F %%i in (%1) do set _ARG=%_ARG% %%~i

现在对我有用了:

H:\>groovy test .*
.*

我本来打算提交一份错误报告,但看起来如果不先在项目网站上注册我就不能这样做,所以如果你愿意,可以提交一份。

旁注:

虽然问题是由 startgroovy.bat 中的错误引起的,但它也暴露了 Windows 批处理器中的错误(或者至少是一种奇怪的行为);如果变量不存在,环境变量子字符串扩展会表现得很奇怪。上面显示的 if 行在命令行上按预期工作(没有环境变量替换),但在批处理文件中它被破坏了,结果如下:

if "x~0,1_ARG:~1

因此出现语法错误。

关于regex - 运行 groovy 时 Windows CMD 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749433/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com