在windows中的ruby中,执行cmd提示命令’move’会出现错误“命令的语法不正确。”
但它在红宝石之外工作
C:\ rubytest> echo asdf> c:\ techprogs \ azzz.azz
C:...
这里的问题可能是反斜杠,它在插值的Ruby字符串中有重要意义,双引号但也有反引号样式的shell命令。
因此,您的命令被解释为:
move /y c:^Iechprogs^Gzzz.azz c:^Iechprogs^Gutorun.bat
哪里 ^I 是 "\t" 这是一个制表符,和 ^G 是 "\a" 这是一个 钟声人物 。
^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 ,整个有用的文件和目录操作实用程序包的一部分。
force: true
/y
FileUtils.mv
如果出现问题,您还可以获得正确的异常,如果移动失败,则会出现错误代码。
的 由barlop添加 强>
确认以上内容。双反斜杠修复它,我看到通过做`echo copy / y c:\ techprogs ...`单反斜杠会发生什么,我看到删除了techprogs, c:\techprogs 成为 c:<ascii-9>echprogs. 和 \autorun 成为 <ascii-7>utorun
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>