2013-10-03 84 views
1

在cmd中,可以使用代字符「運算符」來通過傳入的參數來執行一些很酷的技巧。例如,%〜dp0返回當前腳本的路徑名。Windows命令行tilde運算符的完整環境變量?

你能做到任何環境變量?例如:

set foo=1234.exe 
echo %~nfoo% 

有沒有辦法做到這一點?

+0

'幫助set'和'幫助for'會告訴你所有可能的用法。 –

回答

2

您也可以通過for循環,而不是一個子程序篩選變量:

setlocal 
set foo=1234.exe 
for %%I in ("%foo%") do echo %%~nI 
1

是的,有點。

在以下文件(我命名test1.cmd)有在同一個.cmd文件傳遞一個文件路徑和名稱到子程序和獲取驅動器號和路徑返回的一個例子。通過設置在子程序的最後一行多個環境變量,你可以返回驅動器盤符,路徑,文件名,屬性等

最後一行是重要組成部分的更多的組合。 Windows命令處理器一次對一行進行評估,以便首先將環境變量擴展爲其文本值,然後處理該行。該擴展行破壞了子例程的範圍,返回到外部範圍(endlocal),將新變量(mytest2)設置爲子例程的(擴展)%dp1的值,然後執行goto:eof,它將返回到調用線。


setlocal 

set mytest=c:\windows\a file with spaces in name.txt 

call :mytest2 "%mytest%" 

echo %mytest2% 

:ender 
endlocal 

goto :eof 

:mytest2 
setlocal 
echo %~dp1 

endlocal && set mytest2=%~dp1 && goto :eof