¿Cómo borro todas las variables de entorno de una sesión de shell de Windows?

12

Si inicio una nueva sesión de shell de Windows y escribo:

env

Veo muchas variables de entorno establecidas. Quiero depurar la ejecución de un programa de línea de comandos eliminando todas las variables de entorno de la sesión de shell actual.

Podría ir uno por uno con el siguiente enfoque:

SET FOO=
SET BAR=
SET ... ... ...

Sin embargo, ¿hay una manera simple de eliminarlos de una vez?

TiGz
fuente
1
¿Qué es env? Nunca he oído hablar de eso antes, y no funciona aquí.
paradroid

Respuestas:

13

Puede escribir esto en un archivo por lotes:

@echo off
if exist ".\backupenv.bat" del ".\backupenv.bat"
for /f "tokens=1* delims==" %%a in ('set') do (
echo set %%a=%%b>> .\backupenv.bat
set %%a=
)

Básicamente se ejecuta a través de cada variable de entorno, los respalda en un archivo por lotes ( backupenv.bat) y luego borra cada variable. Para restaurarlos puedes ejecutar el backupenv.batarchivo.

Garfio
fuente
Esto es genial. ¡Gracias! Una pequeña cosa: el archivo backupenv.bat parece tener 2 espacios finales al final de cada línea SET A = B. Esto parece arruinar algunas variables en la restauración.
TiGz
Eliminado el espacio después de %% a = %% b, vea la respuesta editada. Debería estar bien ahora.
Gaff
Eso eliminó uno de los dos espacios ... queda un espacio al final de cada línea SET. Lo cual es raro.
TiGz
Tal vez el espacio se agregó cuando ejecutó anteriormente mi script (ligeramente roto) y ejecutó el lote para restaurar ... ¿agregando así un espacio a cada variable? ¿Luego lo ejecutó nuevamente y en la salida tendría dos espacios? Si este es el caso, perdón por haber sufijado previamente todas sus variables con un espacio. Sin embargo, debería ser fácil de limpiar.
Gaff
No, estaba abriendo un nuevo caparazón cada vez. Pruébalo ... ¿no terminas con un espacio extra?
TiGz 05 de
6

Si solo desea borrar todas las variables de entorno para el archivo por lotes, se vuelve aún más fácil.

@echo off
Setlocal enabledelayedexpansion
Set >set

For /F "tokens=1* delims==" %%i in (set) do set %% %i=
Del set
Set

La línea final genera todas las variables de entorno, que no deberían ser ninguna, confirmando que el código funcionó.

Debido a que Setlocalse utiliza, todos los cambios en el entorno se pierden una vez que finaliza el lote. Entonces, si escribe Setdespués del lote, verá que todas las variables de entorno todavía están allí, por lo tanto, no es necesario almacenarlo en un archivo de copia de seguridad.

Aaron Lowe
fuente
Haga un esfuerzo para usar el formato de código. Hace las cosas mucho más legibles.
boxspah
la respuesta aceptada es mejor que esta, ya que la otra respuesta tiene una forma de hacer una copia de seguridad existente
SeanClt
@SeanClt Necesitas leer mi comentario completo. Se dice que la copia de seguridad no es necesaria en este caso.
Aaron Lowe
@scripthero Actualmente no puedo formatear las publicaciones, lo siento
Aaron Lowe
Sí, tienes razón
SeanClt