2010-09-29 205 views
5

我嘗試使用Process.Start嘗試運行所有內容時,從另一個批處理文件調用批處理文件時出現問題。基本上,我叫一個批處理文件的執行,從我的C#程序,它看起來像這樣:將批處理文件包含在批處理文件中


call include.bat 

//execute the rest of the batch file here 

的include.bat文件設置路徑,並可以通過一些其他的批處理文件中使用。當我運行Process.Start有時這有效,有時我得到ERROR: cannot find include.bat。首先有什麼想法,爲什麼發生這種情況?關於如何從批處理文件解決這個問題的想法?

回答

7

要切換到您的批處理文件所在的目錄,使用:

cd %~dp0 

我這樣做幾乎所有我的批處理腳本。這種方式相對路徑應該始終工作。

+0

感謝那 – Dimitris 2010-09-29 11:25:14

+0

如果它解決了您的問題,您可以標記爲答案。 :) – Botz3000 2010-09-29 11:28:04

+1

我通常設置一個變量,以便腳本更具人類可讀性:SET CDIR =%〜dp0 – djangofan 2011-11-02 18:58:42

1

我想嘗試的第一件事是在include.bat調用語句中使用完整路徑信息。如果修復它,你可能只是沒有從正確的位置運行批處理文件。我確定C#中有一個「工作目錄」功能,我只是不確定它是什麼。

1

您是否將ProcessStartInfo.WorkingDirectory(http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx)設置在您傳遞給Process.Start的ProcessStartInfo上?

由於include.bat有時無法找到,工作目錄可能是錯誤的(不是include.bat所在的文件夾)。

+0

我必須承認我不這麼做。有沒有辦法從批處理文件中至少暫時修復它? – Dimitris 2010-09-29 11:22:03

+0

按照上述Botz3000的說明使用cd%〜dp0。 – 2010-09-29 11:23:16

+0

感謝那 – Dimitris 2010-09-29 11:24:32

2

腳本之前,嘗試CD /D %~dp0

+1

您的權利可能。如果這意味着切換到另一個驅動器盤符,但使用/ D開關,CD可能不起作用,也許它會。我沒有嘗試,但它是一個好主意...... – djangofan 2012-09-10 18:14:38

2

我知道這是一個老問題,但我認爲這將是值得一提的是,由公認的答案晉升(即改變工作目錄)的方法可能並不總是合適的。

更好一般方法是通過完整路徑是指依賴關係:

call "%~dp0include.bat" 

(自%〜DP0已經與一個反斜槓結束,我們並不需要添加另外一個。)

這裏是改變工作目錄的一些好處:

  1. 批處理文件的其餘部分仍然可以使用原始工作目錄。
  2. 即使沒有「SETLOCAL」,命令提示符中的原始工作目錄也會保留。
  3. 如果第一個批處理文件通過UNC路徑運行(例如「\\ server \ share \ file.bat」),全路徑調用將成功,而changing the directory (even with "cd /d") will fail。 (使用PUSHD/POPD會處理這一點,但他們有自己的一套問題。)

這些好處是別名類型的批處理文件尤爲重要,即使他們不是具體的情況作爲重要的是,激發了這個問題。