我可以有一个包含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时,它显示为一个空格
答案 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表示提示。拿出来它应该有用。