0

我在使用 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

这为我提供了来自具有以下信息的文件的输出。

电脑蓝屏0 NTFS0 磁盘0 服务0 服务0

测试”没有空格,但测试在输出其余部分的下方

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

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

4

1 回答 1

0

您的问题是您的 FOR 循环正在按预期调用,但是,一旦您完成了 FOR 循环,无论如何:test您都将进入。: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-19T13:30:46.650 回答