在我的蝙蝠劇本,我調用另一個腳本,並傳遞一個字符串參數.BAT當前文件夾的名稱
cscript log.vbs "triggered from folder <foldername> by Eric"
的字符串參數,你可以看到包含該腳本是文件夾的名稱被稱爲。什麼是正確的方式來通過這動態插入這個文件夾名稱的腳本?
在我的蝙蝠劇本,我調用另一個腳本,並傳遞一個字符串參數.BAT當前文件夾的名稱
cscript log.vbs "triggered from folder <foldername> by Eric"
的字符串參數,你可以看到包含該腳本是文件夾的名稱被稱爲。什麼是正確的方式來通過這動態插入這個文件夾名稱的腳本?
如果你想你在哪裏目前是目錄,你可以從%cd%
。這是你目前的工作目錄。
如果你想成爲改變腳本執行期間當前工作目錄,只需將它保存在啓動:
set startdir=%cd%
,那麼你可以在你的代碼中使用%startdir%
不管任何更改後(影響%cd%
)。
如果你只想得到這條道路的最後組件(根據您的評論),您可以使用以下作爲基準:
@setlocal enableextensions enabledelayedexpansion @echo off set startdir=%cd% set temp=%startdir% set folder= :loop if not "x%temp:~-1%"=="x\" ( set folder=!temp:~-1!!folder! set temp=!temp:~0,-1! goto :loop ) echo.startdir = %startdir% echo.folder = %folder% endlocal && set folder=%folder%
此輸出:
C:\Documents and Settings\Pax> testprog.cmd startdir = C:\Documents and Settings\Pax folder = Pax
它通過從完整路徑末尾複製字符,一次一個,直到找到\
分隔符。它既不漂亮,也沒有效率,但Windows批處理編程很少是:-)
編輯
其實,有一個簡單而非常有效的方法來獲得的最後一個組件名稱。
for %%F in ("%cd%") do set "folder=%~nxF"
不爲這種情況的一個問題,但如果你是在處理包含可能會或可能不會與\
結束路徑的變量,那麼你可以通過附加\.
for %%F in ("%pathVar%\.") do set "folder=%~nxF"
嘗試%〜dp0。
@Berming,我已經添加了代碼,它會給你路徑的最後一個組件。查看更新。 – paxdiablo 2010-10-03 08:28:19
正是我所需要的,非常感謝。我注意到,雖然我'endlocal'後我不能訪問'文件夾'變量,所以我拿出了那一行。我想,因爲我刪除了該行,我還應該刪除頂部的@setlocal enableextensions enabledelayedexpansion',但刪除該行會導致問題,所以我保留了那一行。 – Berming 2010-10-03 11:25:17
@Berming,看到更新。如果你離開'endlocal',它會影響你以後。你可以使用'setlocal/endlocal'來確保延遲擴展能夠正常工作,但是將'endlocal'修改爲'endlocal && set folder =%folder%',以便'folder'變量能夠轉義。 – paxdiablo 2010-10-04 03:42:50