2016-02-28 142 views
4

我有一個批處理腳本,我想要獲取腳本的完整路徑。我很好奇,是有這之間的任何差別:批處理腳本:%0和%〜f0有什麼區別?

set scriptpath=%0 

這:

set scriptpath=%~f0 

感謝您的幫助。

+0

類型爲'/'和_read_,或者點擊[瀏覽](http://ss64.com/nt/syntax-args。 html) – Aacini

回答

5

%0引用參數0 - 批處理文件的名稱 - 總是完全按照在命令行或其他批處理文件中指定的名稱。

因此,如果命名存儲在C:\TempTest.bat批處理文件啓動例如從一個命令提示窗口內與當前的目錄是用C:\temp\test,然後%0通過temp\test對參考取代。

%~f0被取代幾乎總是通過批處理文件名與文件擴展名和完整路徑 - 完整的文件名 - 始終沒有雙引號,即使文件名或路徑包含1個或多個字符,如空間或&()[]{}^=;!'+,`~通常需要使用雙引號。

因此批處理文件Test.bat存儲在C:\Temp與線

@echo %0 
@echo %~f0 

從命令提示符窗口中開始"temp\test.bat"與當前目錄是C:\輸出:

"temp\test.bat" 
C:\Temp\Test.bat 

你可以在這裏都可以見到差異:

  • 完全合格的批處理文件名稱,
  • 始終沒有雙引號和
  • 正確的大寫字母。

%~f0的描述和其他替代可以在命令CALL輸出上運行在命令提示符窗口for /?和閱讀運行call /?或命令的幫助有關所有顯示的頁面的幫助下閱讀。

注1:

如果批處理文件以後需要和當前目錄從批處理文件中使用任何CDPUSHD修改分配完全合格的批處理文件名稱的環境變量。原因請參閱In Batch file ~dp0 changes on changing directory上的答案。

注2:

運行上述從C:\例如批處理文件只是"temp\test"導致輸出:

"temp\test" 
C:\Temp\Test 

文件擴展名是缺少其由第一的引用主題中所述的錯誤引起的注意。開始temp\test批處理文件沒有雙引號產生預期的輸出:

temp\test 
C:\Temp\Test.bat 
4

%~f0導致%0被展開爲完全合格的路徑名。它們可能相同,也可能不相同,具體取決於%0的原始值。

這些修飾符的含義隱藏在For命令的文檔中。

+1

或者在幫助輸出中隱藏幫助輸出,在命令提示符窗口內爲命令__call__運行'call /?',與幫助爲命令運行'for /?'輸出__FOR__相比, – Mofi