Cmd de Windows: comandos de escape para iniciar cmd desde un archivo por lotes, ejecutando comandos que se agregan a la RUTA

Cmd de Windows: comandos de escape para iniciar cmd desde un archivo por lotes, ejecutando comandos que se agregan a la RUTA

Me gustaría tener un símbolo del sistema cmd, que asigne un directorio de red a una ruta local y luego agregue esa ruta local a la variable PATH (local).

He preparado este tipo de script .bat, que se ejecuta como se esperaba:

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%

Básicamente, este es el script que me gustaría ejecutar al inicio del nuevo cmd.execuando ejecuto el .batarchivo. El problema es que cuando se "monta" una ruta de red (por ejemplo, cuando pushdse invoca), siempre obtiene una letra de unidad local nueva y diferente (X:, Y:, Z:...), así que tengo que detectar qué El equivalente de la ruta de la unidad local es (por ejemplo, a través de chdir) antes de poder agregarlo a la RUTA para esa sesión; y además, me sorprende por qué SET PATH=%PATH%;%bvar%siempre se duplica el punto y coma ;antes de la parte adjunta, cuando el concatenado final PATHes echoed.

Aprendí que el signo de porcentaje %se escapa duplicándolo ( %%); ese signo comercial &es el separador para concatenar varias líneas de código en una sola línea, que se escapa con el símbolo de intercalación ^, pero todavía estoy desconcertado porque las comillas dobles "parecen terminar textualmente en cualquiera de las variables a través de SET o fuera de echo; Además, el forcomando siempre parece ejecutarse (y no puedo escapar de él con un signo de intercalación), incluso si es parte de una declaración de variable SET.

Entonces, en última instancia, no puedo convertir este script en una sola línea, por lo que puedo usarlo como argumento para start.execomandos de inicio; Tenga en cuenta que no me gustaría tener dos archivos por lotes, me gustaría tener solo uno. Primero me gustaría almacenar este script en una variable, para poder repetirlo para depurarlo, y esto es lo lejos que llegué:

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%"

Problema: el nuevo cmd.exe comienza con:

'""' is not recognized as an internal or external command,
operable program or batch file.

Luego, %CD%se refiere a laanteriordirectorio (desde donde se inició el script .bat), no al nuevo.

Ninguno de estos recupera el nuevo nombre de unidad/ruta cuando se ejecuta de esta manera, excepto tal vez for /f "usebackq" %%x in (`chdir`), que realmente no puedo capturar (puedo ver su resultado) y tampoco parece tan consistente (a veces parece que está vacío).

¿Cómo puedo hacer que mi primer script escape, para que pueda servir como una sola línea en el startargumento de mi segundo script, para poder iniciar cmd.exela terminal según lo previsto?

Referencias:

Respuesta1

Estás demasiado pensando en esto. Parece que los árboles no permiten ver el bosque ;-)

En primer lugar, "%~dp0"proporciona la ubicación del script que se está ejecutando actualmente,noel directorio actual.

En segundo lugar, ya está utilizando %CD%para imprimir el directorio actual al final. ¿Por qué no usarlo cuando extienda su RUTA?

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

información relacionada