Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理脚本中的变量初始化问题_Batch File_Variable Initialization - Fatal编程技术网

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

Batch file 批处理脚本中的变量初始化问题,batch-file,variable-initialization,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

我写了以下脚本:

@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

)
@echo关闭
setlocal EnableDelayedExpansion
REM从C:\Files中收集源文件名并加载到C:\doc.txt中
目录C:\sources\Sourcefiles/b/a-d>C:\sourcefilenames.txt
REM获取源文件的计数并存储到变量计数中
对于/F%%I in('call C:\count.bat'),请设置计数=%%I
REM循环“计数”次数和echo temp.txt值
对于(1,1,%count%)中的/L%%A,请执行以下操作(
REM调用line.bat为每个循环获取sourcefilenames.txt的第1行、第2行等
调用line.bat%%A>C:\temp.txt
set/p var=返回以前的运行值
键入C:\temp.txt-----------。返回temp.txt的当前值
)
基本上,我在上述脚本中尝试做的是: 我正在从temp.txt的内容创建一个变量(var)(temp.txt中的数据在每次循环运行时都会改变),以便在多个循环中使用

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

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

我想变量会保留在内存中,不会被重新读取。尝试限制变量的有效性。 setlocal 呼应某事。。。。。 端部
或者@echo off&setlocal

我想变量仍保留在内存中,不会被重新读取。尝试限制变量的有效性。 setlocal 呼应某事。。。。。 端部
或者@echo off&setlocal

当CMD.exe遇到括号中的代码块时,它会在执行之前读取并解析整个代码块。这可能会导致不直观的行为。在本例中,您的
echo var:%var%
行在循环开始时被解析一次,以后再也不会被解析

最简单的修复方法是将该行更改为

echo var:!var!
!瓦尔语法。这是因为在脚本中设置了
enabledelayedexpansion

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

FOR /L %%A IN (1,1,%count%) DO call :loopLineBat %%A
... rest of script
exit /b

:loopLineBat
 >%temp%\temp.txt call line.bat %1

<%temp%\temp.txt set /p var=
echo var:%var%
type %temp%\temp.txt
exit /b
对于(1,1,%count%)中的/L%%A,请调用:loopLineBat%%A
... 脚本的其余部分
退出/b
:loopLineBat
>%temp%\temp.txt调用line.bat%1

当CMD.exe遇到括号中的代码块时,它会在执行之前读取并解析整个代码块。这可能会导致不直观的行为。在本例中,您的
echo var:%var%
行在循环开始时被解析一次,以后再也不会被解析

最简单的修复方法是将该行更改为

echo var:!var!
!瓦尔语法。这是因为在脚本中设置了
enabledelayedexpansion

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

FOR /L %%A IN (1,1,%count%) DO call :loopLineBat %%A
... rest of script
exit /b

:loopLineBat
 >%temp%\temp.txt call line.bat %1

<%temp%\temp.txt set /p var=
echo var:%var%
type %temp%\temp.txt
exit /b
对于(1,1,%count%)中的/L%%A,请调用:loopLineBat%%A
... 脚本的其余部分
退出/b
:loopLineBat
>%temp%\temp.txt调用line.bat%1

谢谢你的答复。。实际上,我是批处理脚本的初学者。。因此,请您根据需要编辑脚本并与我共享。谢谢您的回复。。实际上,我是批处理脚本的初学者。。因此,请您根据需要编辑脚本并与我共享。您有问题。使用
echo变量:!瓦尔。您有问题。使用
echo变量:!瓦尔。谢谢Stephan和Ryan。。我尝试了这两种方法&正如我所寻找的那样,效果非常好。。谢谢,伙计,大家好,我还有一个问题。你能澄清一下吗。我想将下面脚本的输出存储到一个变量中。findstr/R/N“^”C:\Users\Sunaj\Desktop\batch_script\doc.txt | find/C:“我试图使用------For/F%%I in('findstr/R/N“^”C:\Users\Sunaj\Desktop\batch_script\doc.txt | find/C:“)设置变量=%%I------但似乎由于双引号,上述脚本不起作用。请suggest@Sunaj看见如果没有帮助,请随时联系。谢谢Stephan&Ryan。。我尝试了这两种方法&正如我所寻找的那样,效果非常好。。谢谢,伙计,大家好,我还有一个问题。你能澄清一下吗。我想将下面脚本的输出存储到一个变量中。findstr/R/N“^”C:\Users\Sunaj\Desktop\batch_script\doc.txt | find/C:“我试图使用------For/F%%I in('findstr/R/N“^”C:\Users\Sunaj\Desktop\batch_script\doc.txt | find/C:“)设置变量=%%I------但似乎由于双引号,上述脚本不起作用。请suggest@Sunaj看见如果这没有帮助,请随时联系。