Я хотел бы получить командную строку 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
при запуске файла .bat
. Проблема в том, что когда сетевой путь "смонтирован" (например, когда вызывается pushd
), он всегда получает новую и другую букву локального диска (X:, Y:, Z: ...), поэтому я должен определить, что этот эквивалент пути локального диска (например, через chdir
), прежде чем я могу добавить его в PATH для этого сеанса; а также, я озадачен, почему 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), а не на новый.
Ни один из них не извлекает новое имя диска / пути при запуске таким образом - за исключением, может быть, for /f "usebackq" %%x in (`chdir`)
, который я не могу действительно записать (я вижу его вывод), и не Кажется, что все также соответствует (иногда кажется, что отчеты пустые).
Как я могу получить мой первый скрипт, чтобы он мог служить однострочным в аргументе start
моего второго скрипта, чтобы я мог запустить терминал cmd.exe
как предполагалось?
Рекомендации:
- http://ss64.com/nt/syntax-esc.html
- https://stackoverflow.com/questions/9546324/adding-directory-to-path-environment-variable-in-windows
- Можете ли вы просмотреть путь UNC, используя среду командной строки, не сопоставляя его с сетевым диском?
- Пакетный файл, который запускает cmd.exe, команду, а затем остается открытым по приглашению
- Выполнить несколько команд с 1 строкой в командной строке Windows?