我想要一個 cmd 命令提示符,它將網路目錄對應到本地路徑,然後將該本地路徑新增到(本地)PATH 變數。
我準備了這種 .bat 腳本,它按預期運行:
pushd \\NetworkPath\Users\myname\Downloads
chdir
SET CurrentDir="%~dp0"
SET var=%cd% & SET CDIR=`chdir`
for /f "usebackq" %%x in (`chdir`) do set bvar=%%x
SET PATH=%PATH%;%bvar%
@echo IT IS: %CurrentDir%, %var%, %CDIR%, %bvar% ;;; %PATH% --- %CD%
cmd.exe
本質上,這是我運行文件時想要在 new 開始時運行的腳本.bat
。問題是,當「安裝」網路路徑時(例如,當pushd
呼叫時),它總是會獲得一個新的不同的本機磁碟機號碼(X:,Y:,Z:...),所以我必須檢測這是什麼本機磁碟機路徑等效是(例如通過chdir
),然後我可以將其新增至該會話的 PATH 中;而且,我很困惑為什麼當最後的連接是ed時,為什麼總是在附加部分之前SET PATH=%PATH%;%bvar%
加倍分號。;
PATH
echo
我了解到百分號%
可以用加倍來轉義 ( %%
); & 符號&
是將多行程式碼連接成一行的分隔符,該行用插入符號轉義^
,但我仍然感到困惑,因為雙引號"
似乎最終透過 SET 逐字出現在變數中,或者在echo
;之外該for
命令似乎總是會執行(並且我無法用插入符號轉義它) - 即使它是 SET 變數語句的一部分。
所以最終,我無法將此腳本轉換為單行腳本,因此我可以將其用作start.exe
啟動命令的參數;請注意,我不想有兩個批次文件,我只想有一個。我想首先將此腳本儲存在一個變數中,這樣我就可以回顯它進行調試 - 這就是我得到的結果:
SET TCMD="" pushd \\NetworkPath\Users\myname\Downloads ^& chdir ^& SET CurrentDir="%%~dp0" ^& SET var=^%%cd^%% ^& SET CDIR=^(`chdir`) ^& SET PATH=%%PATH%%;%%CD%% ^& echo %%CurrentDir%%, %%var%%, %%CDIR%%, %%bvar%% ;;; %%PATH%% --- %%CD%% ""
echo %TCMD%
start cmd.exe /k "%TCMD%"
問題 - 新的 cmd.exe 開頭為:
'""' is not recognized as an internal or external command,
operable program or batch file.
那麼,%CD%
指的是以前的目錄(.bat 腳本從中啟動的目錄),而不是新目錄。
像這樣運行時,這些都不會檢索新的驅動器/路徑名稱 - 除了 Maybe for /f "usebackq" %%x in (`chdir`)
,我無法真正捕獲它(我可以看到它的輸出),並且似乎也不是那麼一致(有時它似乎報告為空)。
如何讓我的第一個腳本轉義,以便它可以作為我的第二個腳本的參數中的一行start
,以便我可以cmd.exe
按預期啟動終端?
參考:
答案1
你想太多了。你似乎只見樹木不見森林;-)
首先,"%~dp0"
給出目前執行腳本的位置,不是目前目錄。
其次,您已經%CD%
在最後使用列印出當前目錄 - 為什麼在擴展 PATH 時不使用它!
@echo off
pushd "\\NetworkPath\Users\myname\Downloads"
path %path%;"%cd%"