2013-10-02 57 views
1

我有困難正確地逃離這個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?謝謝!

回答

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