我的需求是想將某一個執行檔或batch file,安裝到先前已部屬好的應用程式中。因為只是小工具集,本身也沒有替它設定%TOOL_HOME%之類的變數到系統中。於是我想說: 只要知道之前某一個設在%PATH%中的batch file在哪裡,就可把它給部屬到對應的位置。於是我實做了這個batch幫我取得路徑:
@echo off set BASE=%~dp0 set DIR_RESULT= for /f "usebackq tokens=*" %%i in (`where %1 2^> nul`) do ( set DIR_RESULT=%%~dpi goto :break ) :break if not "%DIR_RESULT%" == "" echo %DIR_RESULT% if "%DIR_RESULT%" == "" echo Can't find %1.
方法就是透過for loop + usebackq去取得指令執行結果。有幾點要注意:
- for必須要有usebackq參數,這樣它才知道後面的in (set)是指令。
- where %1 2^> nul: 如果指令不存在會dump出錯誤訊息,我透過2>null讓它輸出至NULL Device,可以避免要去處理這種情況。(一開始我的寫法是去處理這種情況)
- 透過goto :break讓它只loop一次: 可能會找到多個路徑,但我只需要一個結果就好。
- 找不到的話,%DIR_RESULT%會是空字串。
友藏內心獨白: 不斷的嘗試與學習才會領悟出更好的寫法。
留言
張貼留言