草庐IT

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

coder 2023-11-11 原文

我有一个 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/

有关regex - 运行 groovy 时 Windows CMD 的奇怪行为的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  3. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  4. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  7. ruby-on-rails - 无法让 rspec、spork 和调试器正常运行 - 2

    GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'

  8. ruby-on-rails - before_filter 运行多个方法 - 2

    是否有可能:before_filter:authenticate_user!||:authenticate_admin! 最佳答案 before_filter:do_authenticationdefdo_authenticationauthenticate_user!||authenticate_admin!end 关于ruby-on-rails-before_filter运行多个方法,我们在StackOverflow上找到一个类似的问题: https://

  9. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  10. ruby - Ruby gsub 替换中的行为不一致? - 2

    两个gsub产生不同的结果。谁能解释一下为什么?代码也可在https://gist.github.com/franklsf95/6c0f8938f28706b5644d获得.ver=9999str="\tCFBundleDevelopmentRegion\n\ten\n\tCFBundleVersion\n\t0.1.190\n\tAppID\n\t000000000000000"putsstr.gsub/(CFBundleVersion\n\t.*\.).*()/,"#{$1}#{ver}#{$2}"puts'--------'putsstr.gsub/(CFBundleVersio

随机推荐