0

我可以有一个带有 3 个参数的文本文件:(我们称之为 Test.txt)

One
Two
Three

我读到的所有地方都说要阅读清单,推荐for /f %%A in (test.txt) do ...

我也可以将每个元素加载为

< test.txt (
     set /p Var1=
     set /p Var2=
     set /p Var3=
)

但是,如果我只想要第二个元素怎么办?

这就像传递一个值吗?

call test.bat %var1% %var2% %var3%

并在 test.bat Var2=%2


现在更进一步,在我将变量传递给我的 test.bat 之后

假设我对其进行了一些更改,

set /p var2=%var2%+5    (I added 5)

我如何将这个值发送回我的原始文件,

我看到我应该使用这样的东西

set /p var2="%var2%+5"

这使它成为一个环境变量,因为批处理无法处理返回,

但是,这不起作用,当我在主文档中显示 var2 时,它显示为空白

4

2 回答 2

2

按照您的样品

@echo off

    setlocal enableextensions

    < values.txt (
        set /P var1=
        set /P var2=
        set /P var3=
    )

    echo %var1%
    echo %var2%
    echo %var3%

    rem NO NEED to pass variables, as they are shared
    call secondFile.cmd

    echo %var1%
    echo %var2%
    echo %var3%

    endlocal

secondFile.cmd 的内容是

    set var1=%var1%_textAdded

无需将环境变量传递给子批次。它们共享相同的变量。如果子批处理等待其从命令行的输入,则需要它。

由于两者共享相同的变量,因此子项的变化在父项中是可见的。IF 子进程不使用 setlocal。Setlocal 将批处理文件中的所有更改标记为批处理本地。所以,如果 secondFile.cmd 写成

    setlocal
    set var1=%var1%_textAdded

变量的变化在父级中是不可见的。

在您的回答中,您正在使用 set /P var..... 将修改后的值设置为子项。Set /P用于提示用户。将它与重定向文件一起使用(如您的答案),获取从重定向文件中读取的提示变量。但是要直接为变量赋值,所需要的只是set var=value,或者如果您需要进行一些算术运算,set /A var=calcExpression则使用。

于 2013-10-24T06:23:49.957 回答
0
set /p var2="%var2%+5"

等待用户输入。/p 表示提示。把它拿出来,它应该工作。

于 2013-10-24T05:17:43.250 回答