【问题标题】:How to assign something to global variable from within FOR loop in batch如何在 FOR 循环中批量为全局变量赋值
【发布时间】:2018-02-24 15:29:31
【问题描述】:

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

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

我空了var1。如何提取字符串并在不同的地方将其用于我的目的?

【问题讨论】:

  • 为什么要关闭以local结尾的环境?
  • endlocal & set "var1=%var1%"。 %var1% 在“local”内展开,但set 在“local”外执行。
  • 如果你真的需要关闭环境你可以使用这个:endlocal & set var1=%var1%
  • 很遗憾,我还没有成功
  • 使用USEBACKQ选项时需要在文件名两边加上双引号。

标签: batch-file for-loop global-variables


【解决方案1】:

试试这个。

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

不要像上面那样做endlocal,因为一旦脚本存在它就会结束本地化。但是,如果您想在循环外对字符串中的每一行执行此操作,最好调用一个子例程。

【讨论】:

  • 我需要在 FOR 循环外使用 var1,但 var1 在外面什么都没有
  • @Sergio 但在 for 循环外使用 var1 只会打印最后一个 var 集,这是你想要的吗?
  • @GerhardBarnard 全局目标是从文件中提取一些字符串并将其用作脚本中不同位置的另一个命令的参数。第一次var1 为空
  • @Sergio 请记住,setlocal 和 endlocal 不构成循环的一部分,只是让您知道。它只是设置何时使用和结束扩展和其他功能。
  • @GerhardBarnard 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多