2013-06-12 339 views
189

首先,我看到this topic,但我無法理解。獲取當前批文件目錄

問:

有在D:\path\to\file.bat一個批處理文件內容如下:

echo %cd% 
pause 

輸出是:

C:\ 

它必須是D:\path\to

我究竟做錯了什麼?

+5

您應該閱讀所有問題的答案,特別是較高的投票獲得者,而不僅僅是接受的答案。您發佈的鏈接中得分最高的答案已經可以解答您的問題。 – dbenham

+4

如果您在c:\中輸入批處理文件名稱,那麼c:\是%cd%將要打印的內容。 – foxidrive

回答

373

系統只讀變量%CD%保留批處理調用程序的路徑,而不是批處理文件位置。

您可以獲得用戶鍵入的批處理腳本名稱%0(例如scripts\mybatch.bat)。 Parameter extensions可應用於此,因此%~dp0將返回批處理腳本的驅動器和路徑(例如W:\scripts\),並且%~f0將返回完整路徑名稱(例如W:\scripts\mybatch.cmd)。

您可以通過使用此語法引用其他文件在同一文件夾作爲批處理腳本:

CALL %0\..\SecondBatch.cmd 

這甚至可以在一個子程序中使用,Echo %0會給呼叫標籤,但是,echo "%~nx0"會給你是批處理腳本的文件名。

%0變量被展開時,結果被括在引號中。

More on batch parameters

+1

看,我不需要在'D:\ Dir1 \ Dir2 \ stm.sql'中運行'stm.sql'。我需要'mysql.exe -u root -p mysql <%cd%\ stm.sql'來執行那個stm.sql命令。 –

+0

@HamedKamrava是我的SQL批處理?不是像'*一樣的批處理文件。蝙蝠或'* .sh'? – Stoleg

+0

@ Stoleg-事實上,'D:\ Dir1 \ Dir2 \ batchfile.bat'和'D:\ Dir1 \ Dir2 \ stm.sql'中有2個文件。 batchfile.bat的內容是:'mysql.exe -u root -p mysql

77

很簡單:

setlocal 
cd /d %~dp0 
File.exe 
+5

代碼很簡短,但它不易理解。什麼是File.exe?當前目錄路徑是否存儲在%〜dp0中? –

+1

@IvailoBardarov這裏是答案:https://stackoverflow.com/a/18310141/5259296 –

+0

這個答案實際上回答了這個問題,我想。榮譽。 – macetw

14

在你的.bat文件:

set mypath=%cd% 

現在,您可以使用變量%mypath%以參考.bat文件的文件路徑。要確認路徑是正確的:

@echo %mypath% 

例如,一個名爲DIR.bat具有以下內容

set mypath=%cd% 
@echo %mypath% 
Pause 

運行從目錄g:\test\bat迴音必在DOS命令窗口路徑。

+0

這是最好最簡單的解決方案 – Nani