首页 > 解决方案 > Ruby 在 Windows 上打开带有空格的文件名

问题描述

所以,我可以使用 ruby​​ 从 shell 打开文件system("start filename")。但是,当文件上有空格时,它不起作用,即使我添加了 escape \,或者如果我使用 shellescape。

显然一种方法是首先获取文件的 8.3 短名称,但尝试了这个并没有成功。有谁知道在这种情况下我怎么能简单地逃离一个空间?我当前的代码如下所示:

    require 'shellwords'
    filename = "#{$filenamewithspaces}.docx".shellescape
    system("start #{filename}")

非常感谢!

标签: rubywindowsshellfilenames

解决方案


shellescape在 Windows 上无效。在 Windows 上,您可以使用引号将复杂的文件名括起来。另请注意,如果使用引号,则需要为 提供两个参数start,因为第一个参数被解释为命令窗口标题:

START ["title"] [/D 路径] [/I] [/MIN] [/MAX] [/SEPARATE | /共享] [/低 | /正常 | /高 | /实时 | /高于正常 | /BELOWNORMAL] [/AFFINITY ] [/WAIT] [/B​​] [命令/程序] [参数]

解决这些问题的最简单方法是使用 的多参数版本system

system('start', '', $filenamewithspaces)

如果必须使用单参数版本,那么:

system("start \"\" \"#{$filenamewithspaces}\"")

...正如您所见,它更丑陋且可读性更低。


推荐阅读