我很难正确地逃避这个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的这个命令?谢谢!
答案 0 :(得分: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')) }^^^"
要问自己的另一个问题是你是否真的需要命令shell。在几乎所有情况下,最简单的方法应该可以完美地运作:
ruby -e "File.open('c:\replace_me', 'w') { |f| f.write(File.read('C:/Documents and Settings/All Users/Application Data/replace_me')) }"