最近,我发现自己不得不在linux和windows环境中从java启动ghostscript命令,输入/输出文件名中有空格。该命令的一个示例如下:
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.tmpgs被windows上的gswin32所取代,因为幽灵脚本就在路径上。
我很快意识到我必须以某种方式转义文件名,所以我做的第一件事就是把它们用双引号括起来。这在windows上有效,但在linux上不行:在linux上,我尝试了包含双引号的双引号,并且用反斜杠来逃避白空间,但都没有成功。
为了启动命令,我使用Runtime.getRuntime().exec(command);,传递一个字符串。我发现了以下让幽灵脚本接收名字中有空格的文件(比如“我的文档”中的某些内容)问题,但是:
我想每一次都理解这件事:你能帮我做这个吗?
以下是我的尝试总结,按此说明。
视窗
随函附上双引号中的文件名对我有用:
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
试图将文件名括在双引号中
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 -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 -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"发布于 2012-12-10 11:07:49
为什么不使用包含多个参数的Runtime.exec(String[] args)呢?这个变体是为了避免你不得不逃避这样的论点。由于参数是单独提供的,因此不需要基于空间的插值,因此也没有混淆。
https://stackoverflow.com/questions/13799686
复制相似问题