使用Ruby执行命令行时,如何避开垂直条?

使用Ruby执行命令行时,如何避开垂直条?,ruby,windows,cmd,Ruby,Windows,Cmd,我在Windows中有以下命令行输入: dir /b | ruby -ne 'f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};' C:\tmp\ruby>echo helloworld > foo.txt C:\tmp\ruby>dir /b | ruby -ne "f=$_.chomp;File.read(f).each_line{|line| print f if lin

我在Windows中有以下命令行输入:

dir /b | ruby -ne 'f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};'
C:\tmp\ruby>echo helloworld > foo.txt

C:\tmp\ruby>dir /b | ruby -ne "f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};"
foo.txt
此行用于查找当前目录下包含
helloworld
的所有文件。(我知道还有很多其他的方法可以做到这一点,但这篇文章并没有关注这一点)

我的问题是:

该行出现错误,说明
行不是有效的命令
。然后我意识到Ruby中的
|
作为块变量的大括号是cmd中的管道符号。我试图把整行文字改成双引号,避开|符号,但没有成功。我怎样才能逃出竖条|

请不要以其他方式回答此任务,例如使用其他工具,如grep、find、sed或awk,或将块更改为for循环。

我发现以下是关于管道和特殊字符的说明:

符号(&)、管道(|)和括号()是特殊的 必须前面加转义字符(^)或 将它们作为参数传递时使用引号


单引号似乎是你的问题。改用双引号,因为Windows需要双引号(尽管Unix可以理解这两种情况)

这在Windows中适用于我:

dir /b | ruby -ne 'f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};'
C:\tmp\ruby>echo helloworld > foo.txt

C:\tmp\ruby>dir /b | ruby -ne "f=$_.chomp;File.read(f).each_line{|line| print f if line =~ /helloworld/};"
foo.txt

我知道您提到您尝试了双引号,但如果您粘贴了您实际尝试的内容,我可以看到是否有其他错误。

它确实有效!我确实试过了,但只试过了“逃逸者”,但没有试过,也没有逃过任何东西,结果证明效果出人意料地好。@texasbruce很高兴听到这个消息。这是编程的现实之一——您还必须了解操作系统的大量工作原理。如果我的回答解决了你的问题,请考虑接受。