在批处理脚本中将文件路径连接到环境变量

时间:2013-09-04 20:41:31

标签: windows batch-file

我制作了一个蝙蝠脚本,应该将文件夹列表复制到一个变量,但我没有得到任何变量。换句话说,当我在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,但它并没有完全回答我的问题。

1 个答案:

答案 0 :(得分:2)

这是因为您使用SETLOCAL命令来启用延迟扩展。是的,它提供了您所需的延迟扩展,但它也可以本地化环境变化。一旦批处理脚本结束,就会有一个隐式ENDLOCAL,并恢复旧环境。

您可以通过在脚本末尾添加以下内容,将值传递到ENDLOCAL屏障:

endlocal&set "PATH_VALUE=%PATH_VALUE%"

或者你可以这样写:

(
  endlocal
  set "PATH_VALUE=%PATH_VALUE%"
)

上述两种方法都起作用,因为在ENDLOCAL执行之前会扩展和解析代码块,但是在ENDLOCAL之后执行带有扩展值的SET语句。