加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如何在每个批处理脚本运行后清除变量?

发布时间:2020-12-14 01:39:30 所属栏目:Windows 来源:网络整理
导读:看来,由于我使用SET在批处理脚本中声明我的变量,如果我在cmd中运行多次,变量值将会持续,除非我明确地重置它们. 我必须使用setlocal和endlocal来确保一个运行中的变量不会持续到另一个运行,而不关闭CMD吗? 是的,你应该使用SETLOCAL.这将使本地化任何更改,以
看来,由于我使用SET在批处理脚本中声明我的变量,如果我在cmd中运行多次,变量值将会持续,除非我明确地重置它们.

我必须使用setlocal和endlocal来确保一个运行中的变量不会持续到另一个运行,而不关闭CMD吗?

是的,你应该使用SETLOCAL.这将使本地化任何更改,以便在发出ENDLOCAL后旧的环境将被恢复.

当所有脚本处理完成并返回到命令行上下文时,会为每个活动的SETLOCAL发出一个隐式ENDLOCAL.没有必要明确地发出ENDLOCAL.

此外,如果您的脚本(或例程)被调用,那么当CALL完成时,在CALLed例程中发出的每个活动SETLOCAL都有一个隐式的ENDLOCAL.没有必要把ENDLOCAL放在例行程序的末尾(虽然没有伤害)

例如

@echo off
set var=pre-CALL value
echo var=%var%
call :test
echo var=%var%
exit /b

:test
setlocal
set var=within CALL value
echo var=%var%
exit /b

输出:

var=pre-CALL value
var=within CALL value
var=pre-CALL value

CALLed例程中的ENDLOCAL将不会回滚在CALL之前发出的SETLOCAL.例如.

@echo off
setlocal
set var=VALUE 1
setlocal
set var=VALUE 2
echo before call: var=%var%
call :test
echo after call: var=%var%
endlocal
echo after endlocal: var=%var%
exit /b

:test
setlocal
set var=VALUE 3
echo within local CALL context: var=%var%
endlocal
echo within CALL after 1st endlocal: var=%var%
endlocal
echo within CALL cannot endlocal to before CALL state: var=%var%
exit /b

结果:

before call: var=VALUE 2
within local CALL context: var=VALUE 3
within CALL after 1st endlocal: var=VALUE 2
within CALL cannot endlocal to before CALL state: var=VALUE 2
after call: var=VALUE 2
after endlocal: var=VALUE 1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读