kotlin - 如何在文件路径中运行带有空格的 bat 文件?
问题描述
我想在 Windows 机器上运行一个用于从 Kotlin 程序中将 sass 编译为 css 的 bat 文件。Runtime.exec
在我切换到用户名中有空格的 Windows 帐户之前,我一直在使用所有东西。从我读到的,我读到使用ProcessBuilder
会使这更容易。似乎即使ProcessBuilder
我仍然无法让它工作,无论我尝试什么。
到目前为止,这是我的代码
val commands = mutableListOf(
"cmd",
"/c",
"C:\\Users\\John Doe\\VCS\\test\\tools\\sass\\windows\\dart-sass\\sass.bat",
"--no-source-map",
"C:\\Users\\John Doe\\VCS\\test\\src\\main\\sass\\global.scss",
"global.css"
)
val processBuilder = ProcessBuilder(commands)
val process = processBuilder.start()
...
我得到的错误是'C:\Users\John' is not recognized as an internal or external command, operable program or batch file.
如果我将带有空格的字符串用\"
.
解决方案
如果我没记错的话,所有名称中有空格的 Windows 文件和文件夹都有一个匹配的旧 8.3 格式的短名称,用波浪号 (~) 和数字替换额外的空格和其他字符。
那么无论返回 .bat 和 .sscs 文件的路径,都可以返回该格式的完整文件名吗?
我承认,并没有解决问题,而是避免了问题。
也意味着当有人在文件名中添加空格时,您不会被淘汰(好吧,不太可能,但从一开始就更好地处理)。
推荐阅读
- c++ - 如果 constexpr 给出错误,则在 false 中实例化模板函数
- javascript - 为什么我的变量没有在 php 中传递?
- css - WpBakery (Visual Composer) - 响应式最佳实践
- html - 有没有办法用 css 或 jquery 删除或隐藏图像的一部分
- python-3.x - 用迭代构造子数据框
- java - 防止重复 AggregateCreated 事件的最佳实践
- python - BeautifulSoup:获取文本,创建字典
- c++ - VS107 中 OpenMP C++ 代码的性能和分析
- java - Ubuntu linux 上的 Java 崩溃
- javascript - Tabulator 3.5 中手动触发 ajaxLoader