批处理脚本中的变量初始化问题

时间:2016-06-25 16:47:41

标签: batch-file variable-initialization

我写了以下脚本:

@echo off
setlocal EnableDelayedExpansion

REM Collect source filenames from C:\Files and load into C:\doc.txt
dir C:\sources\Sourcefiles /b /a-d > C:\sourcefilenames.txt

REM fetch count of source files and store into variable count
For /F  %%I in ('call C:\count.bat ') Do Set count=%%I

REM loop "count" number of times and echo temp.txt value
FOR /L %%A IN (1,1,%count%) DO (

REM call line.bat to fetch line 1,line 2 and so on of sourcefilenames.txt    for each loop
call line.bat %%A>C:\temp.txt

set /p var=<C:\temp.txt
echo var:%var%    ----------> returns previous run value
type C:\temp.txt  ----------. returns current value of temp.txt

)

基本上我想用以上脚本做的是: 我正在temp.txt的内容中创建一个变量(var)(temp.txt中的数据将在每次循环运行时更改)以在多个循环中使用。

但我面临的问题是: Echo var是:%var%命令返回我之前的运行值而不是temp.txt当前content.whereas命令“type C:\ temp.txt”返回temp.txt当前内容。 (注意:如果我从其他脚本调用/创建变量“var”,则返回前一个值,否则返回Null)

我们非常感谢您对上述问题的帮助/指导。 感谢

2 个答案:

答案 0 :(得分:0)

我认为变量保留在内存中,没有被重新读取。试图限制变量的有效性。 SETLOCAL 回声...... ENDLOCAL 或者@echo off&amp; SETLOCAL

答案 1 :(得分:0)

当CMD.exe在括号中遇到一段代码时,它会在执行前读取并解析整个块。这可能会导致不直观的行为。在这种情况下,您的node行将在循环开始时解析一次,而不会再次解析。

最简单的解决方法是将该行更改为

echo var:%var%

每次循环都会解析echo var:!var! 语法。这是有效的,因为您在脚本中设置了!var!

此类问题的另一种解决方法是删除括号,而是调用子例程。

enabledelayedexpansion

此循环与上面相同,但由于它不在括号内的块中,因此所有行都按顺序进行解析和执行。