如何在批处理中的FOR循环中将某物赋值给全局变量

3

我有一些代码,它从文件中获取一些字符串并将其赋值给某个变量。该变量将在文件中用于不同的目的:

setlocal EnableDelayedExpansion
FOR /F "tokens=* USEBACKQ" %%F IN (`file.txt`) DO SET var1=%%F
endlocal
echo %var1%

我得到了空的var1。我该如何提取字符串并在不同的地方使用它?

2
你为什么要用“end local”来关闭环境? - Squashman
endlocal & set "var1=%var1%"。%var1%在“local”内被扩展,但set在“local”外执行。 - Stephan
如果你真的需要关闭环境,你可以使用以下命令:endlocal & set var1=%var1%。 - Squashman
1
很遗憾,我还没有成功。 - Sergio
在使用USEBACKQ选项时,需要在文件名周围加上双引号。 - Squashman
1个回答

5
试试这个。
@echo off
Setlocal EnableDelayedExpansion
For /F "tokens=* USEBACKQ" %%F IN ("file.txt") DO Set "var1=!var1!%%F"
Echo !var1!

不要像上面那样执行endlocal,因为它会在脚本退出时立即结束。但是,如果你想在循环外的字符串中对每一行执行它,最好调用子例程。


1
我需要在 FOR 循环外使用 var1,但是在循环外 var1 是空的。 - Sergio
@Sergio,但是在for循环外使用var1只会打印最后一个变量设置,这是你想要的吗? - Gerhard
1
@GerhardBarnard 的全局目标是从文件中提取一些字符串,并将其用作脚本中不同位置的另一个命令的参数。第一次 var1 是空的。 - Sergio
@Sergio 请注意,setlocal和endlocal并不是循环的一部分,这只是为了让你知道。它仅仅是设置何时使用和结束扩展和其他函数。 - Gerhard
@GerhardBarnard 谢谢您 - Sergio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接