2013-02-28 48 views
1

我正在運行一個可能包含或不包含空格的多個參數的exe文件。我用引號括起它們,但它們以某種方式沒有正確傳遞給exe。爲什麼多個帶空格的參數在批處理腳本中沒有正確解釋?

下面是我使用的命令:

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

我認爲CMD應該通過10個參數exe文件,但不知何故,沒有經過正確。

這是結果我得到

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

它基本上說,第二個參數被切碎出於某種原因?

任何幫助將不勝感激,謝謝!

+0

是'D:\ d b \ sequence.fasta'故意的空間嗎? – 2013-02-28 01:49:25

+2

解析參數是可執行文件的責任,但只要makeblastdb遵循常規約定,引號就應該保護空間,以便命令可以正常工作。該命令是否出現在可能拋出報價狀態的更大範圍內? – dbenham 2013-02-28 01:53:13

+0

我懷疑自己,目前正在嘗試查找exe的源代碼。 – 2013-02-28 02:09:01

回答

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 /?尋求幫助的命令。基於事實,你從蟒蛇

在此答案的評論中運行的命令

更新,你的國家,你會嘗試得到命令,從蟒蛇內工作。這可能是你問題的全部來源。

您應該嘗試直接從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

+0

這非常有趣。我一定會努力爲用戶提供更大的靈活性!感謝堆! (一旦我在Python文件中使用它,將選擇作爲答案) – 2013-02-28 21:45:50

+0

@JacobWang - 這是您第一次提到python。這可能是你的問題的根源。看到我更新的答案。 – dbenham 2013-02-28 22:22:18

+0

是的我在Windows shell上測試這個命令,確實是makeblastdb的問題。我直接從python字符串(然後由subprocess.Popen運行)複製上面的行。另外,我正在爲Windows和Linux編寫一個跨平臺的程序,所以我可能需要在linux中找到等效的subst。謝謝! – 2013-03-01 07:00:00

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

+0

運行該命令時,該文件夾沒有短名稱。 – 2013-02-28 02:02:59

+0

我看到,名稱不夠長,無法創建短名稱。 – 2013-02-28 02:05:34

+0

儘管如此,謝謝! – 2013-02-28 02:07:42

2

makeblastdb有一個奇怪的轉義約定。試試這個:

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

不幸的是,這不適用於-out,所以dbenham的答案可能是最好的。

+0

這對我有用。 Als參見[BLAST手冊中的相關章節](http://www.ncbi.nlm.nih.gov/books/NBK279669)。 – BioGeek 2015-07-08 12:58:04

相關問題