即使在设置 EnableDelayedExpansion [重复] 之后,也无法在批处理文件中的 for 循环内设置变量值
Posted
技术标签:
【中文标题】即使在设置 EnableDelayedExpansion [重复] 之后,也无法在批处理文件中的 for 循环内设置变量值【英文标题】:Not able to set a variable value inside for loop in batch file even after setting EnableDelayedExpansion [duplicate] 【发布时间】:2015-02-02 04:39:36 【问题描述】:我想要做的是,我有一个文本文件 (List.txt),我想通过批处理脚本读取(逐行)该文本文件并将该行保存在某个变量中以供以后使用。按照我正在尝试的批处理脚本,但不知道为什么它不起作用?
@echo off
set _filePath= List.txt
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (%_filePath%) do (
set _var = %%a
echo !_var!
)
List.txt 文件有:
abc|def
1234|defg
abcde|98745
输出是:-
ECHO is off
ECHO is off
ECHO is off
我想要的是:
abc|def
1234|defg
abcde|98745
有人可以帮我解决吗?
【问题讨论】:
重复的Why is no string output with 'echo %var%' after using 'set var = text' on command line? 使用set _var=%%a
,等号周围没有空格,您的批处理代码将起作用。
set _filePath= List.txt
也不正确,因为您的列表文件很可能不是以文件名中的空格字符开头。但是这个错误会自动更正。
【参考方案1】:
set _var = %%a
简单的问题 - set
对 =
的 both 两侧的 Spaces 敏感。
使用set "var=value"
从分配的值中排除尾随空格。
【讨论】:
【参考方案2】:虽然 cmets 是正确的,但作者尚未结束问题,因此可能需要更多细节。 在处理文件中的空白行的批处理脚本中还有另一个错误(这会导致 echo 给出错误的输出)。批处理文件的固定版本是:
@echo off
set _filePath=List.txt
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (%_filePath%) do (
set _var=%%a
echo;!_var!
)
【讨论】:
以上是关于即使在设置 EnableDelayedExpansion [重复] 之后,也无法在批处理文件中的 for 循环内设置变量值的主要内容,如果未能解决你的问题,请参考以下文章
即使在提供静态文件时,仍然设置使用 PHP 设置的 HTTP 标头