首先,我看到this topic,但我無法理解。獲取當前批文件目錄
問:
有在D:\path\to\file.bat
一個批處理文件內容如下:
echo %cd%
pause
輸出是:
C:\
它必須是D:\path\to
我究竟做錯了什麼?
首先,我看到this topic,但我無法理解。獲取當前批文件目錄
問:
有在D:\path\to\file.bat
一個批處理文件內容如下:
echo %cd%
pause
輸出是:
C:\
它必須是D:\path\to
我究竟做錯了什麼?
系統只讀變量%CD%
保留批處理調用程序的路徑,而不是批處理文件位置。
您可以獲得用戶鍵入的批處理腳本名稱%0
(例如scripts\mybatch.bat
)。 Parameter extensions可應用於此,因此%~dp0
將返回批處理腳本的驅動器和路徑(例如W:\scripts\
),並且%~f0
將返回完整路徑名稱(例如W:\scripts\mybatch.cmd
)。
您可以通過使用此語法引用其他文件在同一文件夾作爲批處理腳本:
CALL %0\..\SecondBatch.cmd
這甚至可以在一個子程序中使用,Echo %0
會給呼叫標籤,但是,echo "%~nx0"
會給你是批處理腳本的文件名。
當%0
變量被展開時,結果被括在引號中。
看,我不需要在'D:\ Dir1 \ Dir2 \ stm.sql'中運行'stm.sql'。我需要'mysql.exe -u root -p mysql <%cd%\ stm.sql'來執行那個stm.sql命令。 –
@HamedKamrava是我的SQL批處理?不是像'*一樣的批處理文件。蝙蝠或'* .sh'? – Stoleg
@ Stoleg-事實上,'D:\ Dir1 \ Dir2 \ batchfile.bat'和'D:\ Dir1 \ Dir2 \ stm.sql'中有2個文件。 batchfile.bat的內容是:'mysql.exe -u root -p mysql
很簡單:
setlocal
cd /d %~dp0
File.exe
代碼很簡短,但它不易理解。什麼是File.exe?當前目錄路徑是否存儲在%〜dp0中? –
@IvailoBardarov這裏是答案:https://stackoverflow.com/a/18310141/5259296 –
這個答案實際上回答了這個問題,我想。榮譽。 – macetw
在你的.bat文件:
set mypath=%cd%
現在,您可以使用變量%mypath%
以參考.bat
文件的文件路徑。要確認路徑是正確的:
@echo %mypath%
例如,一個名爲DIR.bat
具有以下內容
set mypath=%cd%
@echo %mypath%
Pause
運行從目錄g:\test\bat
迴音必在DOS命令窗口路徑。
這是最好最簡單的解決方案 – Nani
您應該閱讀所有問題的答案,特別是較高的投票獲得者,而不僅僅是接受的答案。您發佈的鏈接中得分最高的答案已經可以解答您的問題。 – dbenham
如果您在c:\中輸入批處理文件名稱,那麼c:\是%cd%將要打印的內容。 – foxidrive