使用批处理文件重置环境变量

时间:2014-12-04 12:53:45

标签: batch-file environment-variables

我想重置除列表中的所有环境变量。

我试试这个:

@echo OFF
SETLOCAL ENABLEDELAYEDEXPANSION
set notToChange=APPDATA PATH
for /f "delims=" %%i in ('set') do (
    for /f "delims==" %%j in ("%%i") do (
        set "var=%%j"
    )
    if "%notToChange%"=="%notToChange:!var!=%" (
        set !var!=
    )
)

我遇到了问题:

if "%notToChange%"=="%notToChange:!var!=%"

它不起作用。我不明白为什么。

3 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
set "notToChange=APPDATA PATH"
for /f "delims==" %%i in ('set') do IF /i "%%i" neq "nottochange" IF /i "%nottochange%" equ "!nottochange:%%i=!" ECHO clear %%i

GOTO :EOF

我建议用这个程序极其谨慎。我只是评论说要清除变量(set "%%i="应该清除它,如果那是你真正想做的......)

不要nottochange需要在不改变我的列表中。

答案 1 :(得分:1)

扩张并不像你希望的那样发挥作用 您需要使用另一个FOR-Loop来替换变量 附加循环将变量var复制到参数%%V

@echo OFF
setlocal EnableDelayedExpansion
set "notToChange=APPDATA PATH notToChange"
for /f "delims=" %%i in ('set') do (
    for /f "delims==" %%j in ("%%i") do (
        set "var=%%j"
    )

    for /F "delims=" %%V in ("!var!") do (
          if "!notToChange:%%~V=!" == "!notToChange!" (
              set "!var!="
          )
    )
)

在阅读了Magoo的解决方案之后,我意识到了notToChange变量的问题,所以我添加了一些代码来避免这个问题

顺便说一下。这将仅删除批处理文件中的变量,因为setlocal将被endlocal隐式还原,还原所有变量

答案 2 :(得分:1)

set "notToChange=APPDATA PATH"
for /f "delims==" %%a in ('set') do (
    set "remove=1"
    for %%b in (%notToChange%) do if /i "%%a"=="%%b" set "remove="
    if defined remove set "%%a=" & set "remove="
)
set

看到已发布的代码,我不知道我是否遗漏了某些内容,但这应该可以完成。

已编辑是的,我没有看到的是它并不像我想的那么容易。这很容易

(
    for /f "delims==" %%a in ('set') do  set "%%a="
    set "PATH=%path%"
    set "APPDATA=%appdata%"
)
set
再次

已修改。如果您想继续使用配置变量

,这也可以使用
set "notToChange=APPDATA PATH"

for /f "delims==" %%a in ('set') do (
    setlocal enabledelayedexpansion
    if not defined notToChange set "notToChange=%notToChange%"
    for /f "delims=" %%b in ("!notToChange:%%a=!=") do (
        endlocal 
        if /i "%notToChange%=" equ "%%b" set "%%a="
    )
)
set
相关问题