我想重置除列表中的所有环境变量。
我试试这个:
@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!=%"
它不起作用。我不明白为什么。
答案 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