为什么在批处理脚本中没有正确解释带空格的多个参数?

时间:2013-02-28 01:45:45

标签: batch-file cmd

我正在运行一个带有多个参数的exe,这些参数可能包含也可能不包含空格。我用引号括起来但是它们不知何故没有正确地传递给exe。

这是我正在使用的命令:

makeblastdb -in "D:\d b\sequence.fasta" -input_type fasta -dbtype prot -title xd -out "D:\d b\xd"

我认为cmd应该向exe传递10个参数,但不知何故它没有正确传递。

这是我得到的结果

BLAST options error: File "D:\d" does not exist.

基本上是说第二个论点因某种原因被切断了?

任何帮助将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:3)

根据您对问题的评论,BLAST实用程序无法正确处理带空格的引用路径,并且您的卷不支持短文件名。

显然,您可以将工作目录移动到不包含空格的路径。

另一种方法是使用SUBST临时创建指向有问题路径的虚拟驱动器。

subst K: "d:\d b"
makeblastdb -in "K:\sequence.fasta" -input_type fasta -dbtype prot -title xd -out "K:\xd"
subst /d K:

输入subst /?以获取有关该命令的帮助。

根据您在python中运行命令的事实进行更新

在您对此答案的评论中,您声明您将尝试从python中获取命令。这可能是你问题的全部来源。

您应该尝试直接从Windows命令提示符(cmd.exe控制台)运行问题中的命令。

如果命令在命令提示符下不起作用,那么BLAST实用程序确实存在问题,SUBST是一个很好的解决方案。

如果命令在命令提示符下工作,则问题在于如何从python中弹出命令,并且不需要SUBST命令。

我不是python用户,但我发现许多人在Windows上使用python时遇到类似的问题。也许这会有所帮助:How do I execute a program from python? os.system fails due to spaces in path

答案 1 :(得分:2)

makeblastdb有一个奇怪的转义约定。试试这个:

-in \""D:\d b\sequence.fasta"\"

不幸的是,这对-out不起作用,所以dbenham的答案可能是最好的。

答案 2 :(得分:0)

替代方法是您可以尝试使用目录短名称“D:\d b”,您可以通过在D驱动器上运行dir /X命令找到它。例如,如果我在我的C盘上运行dir / X,这就是我得到的:

01/21/2013    09:47 AM    <DIR>      PROGRA~1     Program Files

因此,您希望使用C:\Program Files,也可以使用C:\PROGRA~1