Cygwin终端批处理文件 - 找不到文件,但如果我自己运行cmd就可以了

时间:2011-07-31 13:40:08

标签: batch-file cygwin inkscape

在cygwin下我创建了to_png.bat,并用inkscape命令行填充它,用于将我的SVG文件转换为PNG。如果我自己在命令行上运行这些命令,它们将成功执行。如果我运行to_png.bat文件,我会收到以下错误:

**(inkscape.exe:3856):警告**:无法打开指定文档'svgs / ace.svg'(不存在或不是有效的SVG文件)

我正在从相同的目录运行,我也尝试指定绝对路径,以防在运行.bat文件时inkscape看到的工作目录不同。我刚刚使用python和os.system调用这样做,并遇到了同样的问题。

编辑: 从dos命令行运行也会出现同样的问题。在PATH上找到inkscape,但是inkscape找不到.svg文件。这是单引号的问题吗?我有文件名,其中包含空格,因此引用。

to_png.bat:

inkscape -h 120 -e 'pngs/ace.png' 'svgs/ace.svg'
inkscape -h 120 -e 'pngs/king.png' 'svgs/king.svg'
inkscape -w 120 -e 'pngs/queen.png' 'svgs/queen.svg'

5 个答案:

答案 0 :(得分:2)

你要做的事情从根本上说是奇怪的。

由于你有bash,你可以简单地创建一个shell脚本并运行你在shell提示符下输入的完全相同的命令。

相反,您正在尝试使用自己的PATH和环境创建一个由cmd.exe运行的.bat文件。为什么呢?

如果你真的必须这样做,首先运行cmd打开Windows命令提示符,然后测试你的命令(和PATH)变量,直到你可以正常工作。您肯定会更改PATH变量或命令行,或两者都更改。但是,如果您可以从Windows命令提示符运行它,那么您将能够将这些命令行复制到.bat文件中并运行它们。

答案 1 :(得分:1)

DOS / Windows中的目录分隔符是反斜杠。因此,使用斜杠可以在cygwin shell下工作,但不能在.bat中工作。

答案 2 :(得分:0)

我认为使用正斜杠传递路径到Windows命令并不总是有效。

答案 3 :(得分:0)

用双刻度替换单个刻度'解决了问题并允许文件名中的空格。

答案 4 :(得分:0)

在Windows批处理脚本中,'字符不会被识别为用于分隔文件名的字符。而是使用"。此外,您可能最好使用反斜杠而不是正斜杠作为路径分隔符。

因此,您的脚本应该如下所示:

inkscape -h 120 -e "pngs\ace.png" "svgs\ace.svg"
inkscape -h 120 -e "pngs\king.png" "svgs\king.svg"
inkscape -w 120 -e "pngs\queen.png" "svgs\queen.svg"