批处理中的多个命令

时间:2013-02-19 13:27:28

标签: for-loop

我遇到了FOR命令的一些问题。我在这里读过无数篇文章,没有什么能满足我正在寻找的东西。我试图获取一个包含大量文件(大约6000)的目录,如果变量读取1而不是0,则读取文件并将数据格式化为单个文件。脚本远未完成我只是有问题。我到目前为止的代码是这样的

@echo off

set Rfile=
dir /b g:\health\test\ >> dir.txt
For /F "tokens=1 delims=" %%y in (dir.txt) do Call :Read %%y

:Read

set Rfile=%~1

For /F "tokens=1,2,3,4,5,6 delims=" %%a in (g:\health\test\%Rfile%) do Call :test %%a

:test
SET Machine=%~1
SET BSOD=%~2
SET NTFS=%~3
SET DISK=%~4
Set Workstation=%~5
Set Server=%~6


If NOT "%BSOD%" == "%Machine%" (

echo %machine% %BSOD% %NTFS% %DISK% %WorkStation% %Server%

 )

:EOF

这从具有以下信息的文件中给出了输出。

  

计算机BSOD0 NTFS0 DISK0服务0服务0

测试“没有空间,但测试在输出的其余部分下面的行

我不希望输出中的文件名(在本例中为test)。我在这做错了什么?

  

文件信息“COMPUTER BSOD0 NTFS0 DISK0 Service0 Service0”

1 个答案:

答案 0 :(得分:0)

您的问题是您的FOR循环正在按预期调用:test但是,一旦完成FOR循环,您无论如何都会进入:test。如果你这样做,那么%1将成为你脚本的输入(在这种情况下是test)。

要修复,只需添加GOTO :eof即可:

For /F "tokens=1,2,3,4,5,6 delims=" %%a in (g:\health\test\%Rfile%) do Call :test %%a

REM Do not fall through into the :test label code!
GOTO :eof

:test
SET Machine=%~1

顺便说一句,你不应该有一个名为:EOF的标签。已经定义了隐式eof标签。

除此之外,您应该确保所有子例程也以goto :eof结尾。在这个例子中你只有1个子程序(:test),所以它工作正常,但是如果你添加更多,你将遇到问题。