Я хотел бы получить командную строку 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 как предполагалось?

Рекомендации:

1 ответ1

1

Вы слишком задумывались над этим. Вы не можете видеть лес за деревьями ;-)

Прежде всего, "%~dp0" указывает местоположение вашего исполняемого скрипта, а не текущий каталог.

Во-вторых, вы уже используете %CD% для распечатки текущего каталога в конце - почему бы не использовать его, когда вы расширяете PATH!?

@echo off
pushd "\\NetworkPath\Users\myname\Downloads"
path %path%;"%cd%"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .