多个批处理命令
问题描述:
我遇到了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 Service0 Service0
测试”没有空间,但测试是在输出
我不想文件名的其余部分线下(在这种情况下测试)输出。我在做什么错在这里?
文件信息 “计算机BSOD0 NTFS0 DISK0 Service0 Service0”
答
您的问题是,您的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
),所以它工作正常,但如果你添加更多,你将会遇到问题。
谢谢你在早上工作太早,在我的批次生锈。 – 2013-02-19 13:36:08