即使在设置 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 标头

弹出窗口有黑色背景,即使它设置为清除

即使在设置委托后协议也不起作用

即使在设置内容模式后,UIImageView也会延伸

为啥即使在我将约束设置为 0 后 UITableView 上仍有余量

为啥即使我在项目设置中更改了语言标准,std::lcm() 也不起作用?