Variable %PATH% de Windows 'Pretty print': cómo dividir en ';' en el shell CMD
Quiero ejecutar una línea simple en el indicador CMD de Windows para imprimir mi %PATH%
variable, una entrada por línea.
Intenté esto: for /f "delims=;" %a in ("%path%") do echo %a
pero esto sólo imprime la primera entrada:
Z:\>for /f "delims=;" %a in ("%path%") do echo %a
Z:\>echo c:\python25\.
c:\python25\.
Además, como puede ver en el resultado anterior, esto también imprime el echo %a
comando y el resultado. ¿Hay alguna manera de parar esto?
Si intento un comando similar, obtengo todas las entradas, pero aún obtengo el echo %a
resultado enviando spam a los resultados. No entiendo por qué lo siguiente imprime todas las entradas, pero mi intento %PATH%
no. Sospecho que no entiendo el /F
cambio.
Z:\>for %a in (1 2 3) do echo %a
Z:\>echo 1
1
Z:\>echo 2
2
Z:\>echo 3
3
La forma sencilla es utilizar
for %a in ("%path:;=";"%") do @echo %~a
Esto funciona para todos sin ;
en la ruta y sin "
un solo elemento
Probado con path=C:\qt\4.6.3\bin;C:\Program Files;C:\documents & Settings
Pero una solución "siempre" es un poco complicada
EDITAR: ahora una variante funcional
@echo off
setlocal DisableDelayedExpansion
set "var=foo & bar;baz<>gak;"semi;colons;^&embedded";foo again!;throw (in) some (parentheses);"unmatched ;-)";(too"
set "var=%var:"=""%"
set "var=%var:^=^^%"
set "var=%var:&=^&%"
set "var=%var:|=^|%"
set "var=%var:<=^<%"
set "var=%var:>=^>%"
set "var=%var:;=^;^;%"
rem ** This is the key line, the missing quote is intended
set var=%var:""="%
set "var=%var:"=""%"
set "var=%var:;;="";""%"
set "var=%var:^;^;=;%"
set "var=%var:""="%"
set "var=%var:"=""%"
set "var=%var:"";""=";"%"
set "var=%var:"""="%"
setlocal EnableDelayedExpansion
for %%a in ("!var!") do (
endlocal
echo %%~a
setlocal EnableDelayedExpansion
)
¿Qué hice allí?
Intenté resolver el problema principal: que los puntos y comas dentro de las comillas deberían ignorarse y solo los puntos y comas normales deberían reemplazarse con";"
Utilicé el intérprete por lotes para resolver esto por mí.
- Primero tengo que hacer que la cadena sea segura , escapando de todos los caracteres especiales.
- Luego todos
;
son reemplazados por^;^;
- y luego el truco comienza con la línea
set var=%var:"=""%"
(¡La cita que falta es la clave!).
Esto se expande de tal manera que todos los caracteres escapados perderán su cursor de escape:
var=foo & bar;;baz<>gak;;"semi^;^;colons^;^;^&embedded";;foo again!;;
...
Pero solo fuera de las comillas , por lo que ahora hay una diferencia entre punto y coma fuera de las comillas;;
y dentro^;^;
.
Esa es la clave.
Una simple línea para embellecer la impresión de la PATH
variable de entorno:
ECHO.%PATH:;= & ECHO.%
Si PATH
era igual a A;B;C
la cadena anterior, la sustitución cambiará esto ECHO.A & ECHO.B & ECHO.C
y lo ejecutará todo de una vez. El punto evita que aparezcan los mensajes "ECHO está activado".
Una actualización de la muy inteligente solución de una sola línea de Stephan Quan: El problema que encontré fue que un punto y coma al final (y tal vez dos puntos y coma sucesivos, es decir, un elemento de ruta vacío) provocaría que apareciera el mensaje "ECHO está activado". Resolví esto insertando un punto inmediatamente después de la segunda declaración ECHO (que es la sintaxis para suprimir mensajes ECHO activados/desactivados). Sin embargo, resultará en una línea vacía adicional:
ECHO %PATH:;= & ECHO.%