【问题标题】:Reading values in a text file and subsequent processing读取文本文件中的值并进行后续处理
【发布时间】:2014-01-25 18:53:35
【问题描述】:

文本文件包含值。这些值将用作可执行文件的参数。 我尝试了以下方法来查看如何使用文件中的输入(逐行):

@echo off
for /f "tokens=*" %%i in (test.txt) do (
set n1=%%i
echo %n1%
echo "done"
)

test.txt 包含数字:例如。

0.1
0.002
3
20

从批处理文件处理的批处理命令集的输出是:

20
"done"
20
"done"
20
"done"
20
"done"

这里出了什么问题?

【问题讨论】:

    标签: windows file batch-file cmd


    【解决方案1】:

    要访问代码块中的变量,您需要delayed expansion

    @ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
    for /f "DELIMS=" %%i in (test.txt) do (
        set "n1=%%~i"
        echo !n1!
        echo "done"
    )
    

    请注意:延迟扩展变量需要感叹号而不是百分比。


    在这部分代码中,如果使用 for 循环参数 %%i 作为“变量”,则不需要 delayed expansion

    @ECHO OFF &SETLOCAL
    for /f "DELIMS=" %%i in (test.txt) do (
        echo %%i
        echo "done"
    )
    

    但是你不能像set "n1=!n1:.0=.!"那样用%%i进行字符串转换。

    【讨论】:

    • 听起来不错...这里有一些讨论stackoverflow.com/questions/6679907/…
    • 这行得通。我明白了!n1!是为每次迭代获取修改后的值。为什么~?此外,它尝试执行乘法集 /a n2=!n1!*10 echo !n2! . 结果是我得到了 0 和 0.1 和 0.002 以及“缺少运算符”。其他两个值的结果很好(30 和 200)
    • cmd 不知道十进制数。您只能使用整数。
    • %%~ 波浪号通常在批处理程序员中用于删除可能出现的双引号。这里没有必要,但也无害。
    • 没有乘法,我在 cmd 中看到小数。我将相应地修改我的文本文件(0.02 而不是 0.002)。你会说我可以使用!n1!作为可执行文件的输入参数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    相关资源
    最近更新 更多