无法正确转义以下Windows命令

我很难妥善逃避这个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? 谢谢!

这个特殊情况是很容易的,因为你根本不需要任何引用; 所有的特殊字符已经在引号内。 尝试:

 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')) }" 

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

 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')) }"