首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用文件路径中的空白从java调用鬼怪脚本

如何使用文件路径中的空白从java调用鬼怪脚本
EN

Stack Overflow用户
提问于 2012-12-10 11:04:11
回答 1查看 3.1K关注 0票数 1

最近,我发现自己不得不在linux和windows环境中从java启动ghostscript命令,输入/输出文件名中有空格。该命令的一个示例如下:

代码语言:javascript
复制
gs -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile=/home/nic/tomcat/6.0.33 with spaces/temp/Thread-11/img-%03d.png /home/nic/tomcat/6.0.33 with spaces/temp/tmpfile.tmp

gs被windows上的gswin32所取代,因为幽灵脚本就在路径上。

我很快意识到我必须以某种方式转义文件名,所以我做的第一件事就是把它们用双引号括起来。这在windows上有效,但在linux上不行:在linux上,我尝试了包含双引号的双引号,并且用反斜杠来逃避白空间,但都没有成功。

为了启动命令,我使用Runtime.getRuntime().exec(command);,传递一个字符串。我发现了以下让幽灵脚本接收名字中有空格的文件(比如“我的文档”中的某些内容)问题,但是:

  • 我也想把它扩展到linux;
  • 我发现双重引用对我来说是有效的,与其指出的不同。

我想每一次都理解这件事:你能帮我做这个吗?

以下是我的尝试总结,按此说明。

视窗

随函附上双引号中的文件名对我有用:

代码语言:javascript
复制
gswin32 -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile="C:\Program Files\tomcat 6.0.33 with spaces\temp\Thread-11\img-%03d.png" "C:\Program Files\tomcat 6.0.33 with spaces\temp\tmpfile.tmp"

Linux

试图将文件名括在双引号中

代码语言:javascript
复制
gs -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile="/home/nic/tomcat/6.0.33 with spaces/temp/Thread-11/img-%03d.png" "/home/nic/tomcat/6.0.33 with spaces/temp/tmpfile.tmp"

试图用反斜杠逃避空白

代码语言:javascript
复制
gs -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile=/home/nic/tomcat/6.0.33\ with\ spaces/temp/Thread-11/img-%03d.png /home/nic/tomcat/6.0.33\ with\ spaces/temp/tmpfile.tmp

两人都试过

代码语言:javascript
复制
gs -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile="/home/nic/tomcat/6.0.33\ with\ spaces/temp/Thread-11/img-%03d.png" "/home/nic/tomcat/6.0.33\ with\ spaces/temp/tmpfile.tmp"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-10 11:07:49

为什么不使用包含多个参数的Runtime.exec(String[] args)呢?这个变体是为了避免你不得不逃避这样的论点。由于参数是单独提供的,因此不需要基于空间的插值,因此也没有混淆。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13799686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档