ruby - Ruby 在 Windows 上打开带有空格的文件名
问题描述
所以,我可以使用 ruby 从 shell 打开文件system("start filename")
。但是,当文件上有空格时,它不起作用,即使我添加了 escape \
,或者如果我使用 shellescape。
显然一种方法是首先获取文件的 8.3 短名称,但尝试了这个并没有成功。有谁知道在这种情况下我怎么能简单地逃离一个空间?我当前的代码如下所示:
require 'shellwords'
filename = "#{$filenamewithspaces}.docx".shellescape
system("start #{filename}")
非常感谢!
解决方案
shellescape
在 Windows 上无效。在 Windows 上,您可以使用引号将复杂的文件名括起来。另请注意,如果使用引号,则需要为 提供两个参数start
,因为第一个参数被解释为命令窗口标题:
START ["title"] [/D 路径] [/I] [/MIN] [/MAX] [/SEPARATE | /共享] [/低 | /正常 | /高 | /实时 | /高于正常 | /BELOWNORMAL] [/AFFINITY ] [/WAIT] [/B] [命令/程序] [参数]
解决这些问题的最简单方法是使用 的多参数版本system
:
system('start', '', $filenamewithspaces)
如果必须使用单参数版本,那么:
system("start \"\" \"#{$filenamewithspaces}\"")
...正如您所见,它更丑陋且可读性更低。
推荐阅读
- docker - 设置两个多阶段构建而不重复自己
- r - 与“ggplot2”中的“geom_spoke”半径一致
- python - Python 编码的神经网络无法正确学习
- java - 如何设置 JSTL Core String 字符编码
- css - CSS显示:Flex;垂直调整大小时的问题
- excel - 如何使用 Google Sheets 或 Excel 制作价格表,根据文本选项自动计算项目价格?
- r - 使用 r 中的 `map` 函数将`for loop` 转换为 purrr
- laravel - 有没有将 Laravel 与 Tailwind CSS 集成的代码示例?
- rust - Rust - 默认情况下切片对象是可变的吗?
- python - 分配给 TensorFlow 中变量的扁平视图的切片