最近、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.tmp
ghostscriptがパスにある場合、gsはウィンドウ上でgswin32に置き換えられます。
なんらかの方法でファイル名をエスケープする必要があることにすぐに気付きました。そのため、最初に行ったのは、ファイル名を二重引用符で囲むことでした。これはWindowsでは機能しましたが、Linuxでは機能しませんでした。Linuxでは、空白をバックスラッシュで囲んだりエスケープしたりする二重引用符を試しましたが、成功しませんでした。
私が使用しているコマンドを起動するためにRuntime.getRuntime().exec(command);
、1つの文字列を渡します。ghostscriptに名前にスペースが含まれるファイル(「マイドキュメント」のようなもの)を取り込むようにするには、次の質問が見つかりました。
- Linux用にも拡張したかったのです。
- 二重引用符は、そこで指摘されている方法とは異なり、私にとってはうまくいくことがわかりました。
私はこのことを一度だけ理解したいと思います:あなたは私がこれをするのを手伝ってくれますか?
SOごとの私の試みの要約を以下に示します。
ウィンドウズ
ファイル名を二重引用符で囲むことは私のために働きました:
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"