簡體   English   中英

在Windows中的ruby中,執行cmd提示命令“ move”會給出錯誤“命令的語法不正確。”

[英]in ruby in windows, executing the cmd prompt command 'move' gives error “The syntax of the command is incorrect.”

在Windows中的ruby中,執行cmd提示命令“ move”會給出錯誤“命令的語法不正確”。

但它在紅寶石之外工作

C:\rubytest>echo asdf>c:\techprogs\azzz.azz

C:\rubytest>del c:\techprogs\azzz.azz

C:\rubytest>echo asdf>c:\techprogs\azzz.azz

C:\rubytest>move /y c:\techprogs\azzz.azz c:\techprogs\autorun.bat
        1 file(s) moved.

C:\rubytest>move /y c:\techprogs\azzz.azz c:\techprogs\autorun.bat
The system cannot find the file specified.

C:\rubytest>

上面所有這些都是可以預期的。

注意,我永遠不會收到一個錯誤消息,指出“命令的語法不正確”。

然后嘗試紅寶石

我有一個簡單的文件,只有一行

C:\rubytest>type syntaxcommandincorrect.rb
`move /y c:\techprogs\azzz.azz c:\techprogs\autorun.bat`

C:\rubytest>

但這給了語法錯誤

C:\rubytest>del c:\techprogs\azzz.azz

C:\rubytest>ruby syntaxcommandincorrect.rb
The syntax of the command is incorrect.

C:\rubytest>echo asdf>c:\techprogs\azzz.azz

C:\rubytest>ruby syntaxcommandincorrect.rb
The syntax of the command is incorrect.

C:\rubytest>

這里的問題可能是反斜杠,在插入的Ruby字符串內部,反斜杠具有重要的意義,雙引號還包括反引號樣式的shell命令。

因此,您的命令被解釋為:

move /y c:^Iechprogs^Gzzz.azz c:^Iechprogs^Gutorun.bat

其中^I"\\t" ,它是一個制表符,而^G"\\a" ,這是一個響鈴字符

代替:

`move /y c:\\techprogs\\azzz.azz c:\\techprogs\\autorun.bat`

現在請記住,Ruby有一個非常全面的函數庫,您可以使用該函數庫直接解決此問題。 不要將其視為精美的shell腳本語言:

require 'fileutils'

FileUtils.mv('c:\techprogs\azzz.azz', 'c:\techprogs\autorun.bat', force: true)

在這里我使用單引號來避免雙反斜杠和force: true等效於/y 它使用FileUtils.mv ,它是有用的文件和目錄操作實用程序的整個軟件包的一部分。

另外,如果出現問題,您還將獲得適當的例外;如果移動失敗,則將獲得錯誤代碼。

由barlop添加

確認以上。 雙反斜杠解決了這個問題,我通過執行puts`echo copy / yc:\\ techprogs ...`看到單反斜杠會發生什么,我看到techprogs的t被刪除了,因為c:\\techprogs變成c:<ascii-9>echprogs. 並且\\autorun成為<ascii-7>utorun

C:\rubytest>cmdoutoutwithoutinitbat.rb | xxd
0000000: 6162 6364 6566 670d 0a63 6f70 7920 2f79  abcdefg..copy /y
0000010: 2063 3a09 6563 6870 726f 6773 0775 746f   c:.echprogs.uto
0000020: 7275 6e2e 6261 7420 633a 0965 6368 7072  run.bat c:.echpr
0000030: 6f67 7307 7a7a 7a2e 617a 7a0d 0a61 6263  ogs.zzz.azz..abc
0000040: 6465 6667 0d0a 6d6f 7665 202f 7920 633a  defg..move /y c:
0000050: 0965 6368 7072 6f67 7307 7a7a 7a2e 617a  .echprogs.zzz.az
0000060: 7a20 633a 0965 6368 7072 6f67 7307 7574  z c:.echprogs.ut
0000070: 6f72 756e 2e62 6174 0d0a                 orun.bat..

C:\rubytest>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM