【问题标题】:Cycle through each line in a text file with variables, batch使用变量、批处理循环遍历文本文件中的每一行
【发布时间】:2014-02-07 17:24:59
【问题描述】:

我正在尝试遍历文本文件中的每一行并将该行的内容用作变量。

到目前为止我有:

for /F "tokens=*" %%A in (mdbs.txt) do (
set var1=%%A
echo "%var1%" > echo1.txt
echo %var1% > echo2.txt
echo set v > set.txt
echo %%A > echo3.txt
)

mdbs.txt 的内容目前是: Grounds_Maintenance.mdb

所以我希望每个回显文件都包含“Grounds_Maintenance.mdb”

但它们包含:

Echo1.txt: ""

Echo2.txt:ECHO 已开启。

set.txt: 设置 v

然而,它正在循环文件,只是没有设置变量。

echo3.txt:Grounds_Maintenance.mdb

我一定错过了一些简单的东西。我想使用一个变量,因为我想稍后删除扩展名:set var1= %var1:~0,-4%

我使用的是 Windows 7。谢谢。

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    变量已设置,但您无法通过括号内的百分比扩展访问它。

    还有第二种访问变量的方法,称为延迟扩展

    setlocal EnableDelayedExpansion
    
    for /F "tokens=*" %%A in (mdbs.txt) do (
      set "var1=%%A"
      echo "!var1!"
    )
    

    【讨论】:

    • >>%out% echo "!var1!" 只是为我打印!var1!
    • @m93a 然后你应该使用setlocal EnableDelayedExpansion这一行启用延迟扩展
    【解决方案2】:

    jeb 回答了您的直接问题。

    但是,如果您只想剥离扩展名,则没有理由分配环境变量。只需使用~n 修饰符:

    for /f "delims=" %%A in (mdbs.txt) do echo %%~nA
    

    在命令提示符下键入 help forfor /?,并查看文档末尾以获取有关修饰符的更多信息。

    【讨论】:

    • 是的,这是最好的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多