0

私はオンラインで何日も探し回りましたが、探しているものが見つかりませんでした.

ファイルを 1 行ずつ読み込んで、ファイル名である最初のトークンを取得してから、そのファイルを実行しています。ファイルを実行した後、アーカイブ フォルダーに移動し、ファイルからテキスト行を削除してから、次の行を読み取ります。

ファイルの実行後にそのテキスト行を削除する必要がありますが、その方法がわかりません

@ECHO OFF
REM Get time date in special format
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b)
For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (set mytime=%%a%%b)

REM Loop through each line
FOR /F "tokens=1-3 delims=, " %%i IN (./ready/input.txt) DO (

    REM>output.txt

    REM Run the file
        call .\ready\%%i || goto :error

    REM Move the file to archive folder
    move .\ready\%%i .\archive\%mydate%_%mytime%_%%j_%%k_%%i

    REM ***Remove the current line of text from input.txt ****

)
goto :EOF

:error
echo Failed with error #%errorlevel%.
exit /b %errorlevel%

編集:詳細。私がやろうとしているのは、実行されなかったファイルを追跡することです...したがって、6行のファイルがある可能性があり、1行目を読み取り、ファイルを実行し、2行目を読み取ってファイルを実行し、ファイル3を見つけることができないため、終了...最後の4行を出力できるようにする必要があります

4

1 に答える 1

1
@ECHO OFF
REM Get time date in special format
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c%%a%%b)
For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (set mytime=%%a%%b)

REM Loop through each line
set "errorfound="
del newfile.txt >nul 2>nul
FOR /F "tokens=1-3 delims=, " %%i IN (./ready/input.txt) DO (

 REM YOU DO REALISE THIS NEXT LINE WILL RE-CREATE THE FILE EACH ITERATION DON'T YOU?
 REM>output.txt

 REM Run the file
 if not defined errorfound (
  call .\ready\%%i
  if errorlevel 1 (
   REM PRESUME ERRORLEVEL1+=fail
   set errorfound=Y
   ) else (
    REM Move the file to archive folder
    move .\ready\%%i .\archive\%mydate%_%mytime%_%%j_%%k_%%i
  )
 )
 if defined errorfound >>newfile.txt echo %%i %%j %%k
)

if defined errorfound echo error found-unprocessed lines in newfile.txt
goto :EOF

最初のエラーで停止したいと仮定すると、上記は機能するはずです。

errorfound一度設定すると、エラーが検出されます。if defined変数の現在の値に作用するため、最初のエラーが見つかった後、入力データ行の重要な部分を新しいファイルに再生成します。

于 2013-10-11T03:53:29.627 に答える