0

FORコマンドに問題があります。私はここで数え切れないほどの記事を読みましたが、私が探しているものにぴったり合うものは何もありません。たくさんのファイル(約6000)があるディレクトリを取得し、ファイルを読み取り、変数が0ではなく1を読み取った場合は、そのデータを1つのファイルにフォーマットしようとしています。スクリプトは完全にはほど遠いです。問題があります。私がこれまでに持っているコードはそれ自体です

@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

これにより、以下の情報を含むファイルからそのような出力が得られます。

コンピューターBSOD0NTFS0DISK0 Service0 Service0

test "スペースはありませんが、テストは残りの出力の下の行にあります

出力にファイル名(この場合はテスト)を含めたくありません。私はここで何が間違っているのですか?

ファイル情報「COMPUTERBSOD0NTFS0DISK0Service0Service0」

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

余談ですが、 というラベルを付けるべきではありません:EOFeofすでに定義されている暗黙のラベルがあります。

余談ですが、すべてのサブルーチンgoto :eofも同様に終了するようにする必要があります。この例ではサブルーチン ( ) が 1 つしかない:testので問題なく動作しますが、さらに追加すると問題が発生します。

于 2013-02-19T13:30:46.650 に答える