1

我很难正确转义这个 Windows 命令。

cmd.exe -c "ruby -e "File.open('c:\replace_me', 'w') { |f| f.write(File.read('C:/Documents and Settings/All Users/Application Data/replace_me')) }""

当执行下面这样的命令时,它将起作用。

ruby -e "File.open('c:\replace_me', 'w') { |f| f.write(File.read('C:/Documents and Settings/All Users/Application Data/replace_me')) }"

任何人都可以指出我如何为 Windows 正确转义这个命令?谢谢!

4

1 回答 1

1

这种特殊情况非常容易,因为您根本不需要任何报价;所有特殊字符都已经在引号内。尝试:

cmd /c ruby -e "File.open('c:\replace_me', 'w') { |f| f.write(File.read('C:/Documents and Settings/All Users/Application Data/replace_me')) }"

在更一般的情况下,您可能需要使用插入符号来引用命令 shell 将解释的那些字符。我认为这是正确的:

cmd /c ruby -e ^"File.open('c:\replace_me', 'w') { ^|f^| f.write(File.read('C:/Documents and Settings/All Users/Application Data/replace_me')) }^"

但是,根据上下文(即,整个命令本身是否由命令 shell 解析),您可能需要双引号:

cmd /c ruby -e ^^^"File.open('c:\replace_me', 'w') { ^^^|f^^^| f.write(File.read('C:/Documents and Settings/All Users/Application Data/replace_me')) }^^^"

要问自己的另一个问题是您是否真的需要命令外壳。在几乎所有情况下,最简单的方法都应该可以完美运行:

ruby -e "File.open('c:\replace_me', 'w') { |f| f.write(File.read('C:/Documents and Settings/All Users/Application Data/replace_me')) }"
于 2013-10-02T03:45:14.997 回答