批处理文件通过脚本之间的引用传递参数

时间:2013-10-24 05:14:00

标签: batch-file

我可以有一个包含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时,它显示为一个空格

2 个答案:

答案 0 :(得分: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

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

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

    setlocal
    set var1=%var1%_textAdded

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

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

答案 1 :(得分:0)

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

等待用户输入。 / p表示提示。拿出来它应该有用。