正则表达式 – 运行常规时Windows CMD的奇怪行为
我有一个groovy脚本重命名与正则表达式匹配的文件
我这样推出它 C:&;groovy rename test.* test.txt 它工作正常. 但是当我试图传递这个正则表达式时: C:&;groovy rename test.(.*) $1_TEST_$1 命令行返回一条消息: 该命令的语法不正确 并且它不是我的脚本 – 它写的这个cmd.我的脚本甚至都没有运行.即使我将参数(regex)包装在引号中也会发生. 问:为什么?我怎样才能将任何正则表达式作为参数传递? 由于没有人能弄清楚发生了什么,我做了一个更简单的例子: test.groovy println args[0] 我运行它: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 因此语法错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |