我制作了一个蝙蝠脚本,应该将文件夹列表复制到一个变量,但我没有得到任何变量。换句话说,当我在for循环之后回显变量时,我得到了预期的输出,但是在执行脚本之后的shell外面,我没有在变量中看到任何设置。如何才能正确复制所有变量?
我使用的是Windows 7。
Batch FIle(script.bat):
@echo off
setlocal enabledelayedexpansion enableextensions
for /r /D %%x in (*) do (
SET PATH_VALUE=%%x;!PATH_VALUE!
)
echo %PATH_VALUE%
输出windows cmd实用程序
C:\test> script.bat
C:\test\1;C:\test\2
C:\test> echo %PATH_VALUE%
%PATH_VALUE%
如何将%PATH_VALUE%作为环境变量?我发现了一个类似的问题here,但它并没有完全回答我的问题。
答案 0 :(得分:2)
这是因为您使用SETLOCAL
命令来启用延迟扩展。是的,它提供了您所需的延迟扩展,但它也可以本地化环境变化。一旦批处理脚本结束,就会有一个隐式ENDLOCAL
,并恢复旧环境。
您可以通过在脚本末尾添加以下内容,将值传递到ENDLOCAL屏障:
endlocal&set "PATH_VALUE=%PATH_VALUE%"
或者你可以这样写:
(
endlocal
set "PATH_VALUE=%PATH_VALUE%"
)
上述两种方法都起作用,因为在ENDLOCAL执行之前会扩展和解析代码块,但是在ENDLOCAL之后执行带有扩展值的SET语句。