1

このバッチスクリプトで、以前にファイルが処理されていないことを再開時にチェックし、ファイルがない場合は続行しようとしています。つまり、ファイルを処理した場合は、次のファイルにスキップします。これをそのようにするために私は何が必要でしょうか。ありがとう

@echo off
setlocal enabledelayedexpansion
set EXE_FILE=E:\opencv\build\bin\Release\blobtrack_sample.exe
set INPUT_PATH=E:\Glasgow\Test\
set TRACKS_PATH=E:\Glasgow\Tracks\
set COUNT=0
pushd %INPUT_PATH%
for %%f in (*) do if %%f neq %~nx0 (
  set /a COUNT+=1
  echo Processing %%f, track=%%~nf.txt, btavi=test!COUNT!%%~xf
  %EXE_FILE% fg=FG_0S bd=BD_CC bt=CCMSPF btpp=None bta=Kalman btgen=RawTracks track=%TRACKS_PATH%\%%~nf.txt FGTrainFrames=125 %%f
)
popd
4

2 に答える 2

0

%OUTPUT_PATH%\%%~nf.avi存在するかどうかを確認できます。

for %%f in (*) do if %%f neq %~nx0 if not exists "%OUTPUT_PATH%\%%~nf.avi" (
  set /a COUNT+=1
  echo Processing %%f, track=%%~nf.txt, btavi=test!COUNT!%%~xf
  %EXE_FILE% fg=FG_0S bd=BD_CC bt=CCMSPF btpp=None bta=Kalman btgen=RawTracks track=%TRACKS_PATH%\%%~nf.txt FGTrainFrames=125 btavi=%OUTPUT_PATH%\%%~nf.avi %%f
)

しかし、それには少し問題があります。書き込まれたファイルの途中で処理が中断した場合、存在完了を同一視するため、ファイルの半分が再度処理されなくなります。

より堅牢な方法は、最初に一時ファイルに書き込み、次に名前を変更することです。

%EXE_FILE% fg=FG_0S bd=BD_CC bt=CCMSPF btpp=None bta=Kalman btgen=RawTracks track=%TRACKS_PATH%\%%~nf.txt FGTrainFrames=125 btavi=%OUTPUT_PATH%\temp.avi %%f
ren "%OUTPUT_PATH%\temp.avi" "%%~nf.avi"
于 2012-08-02T11:18:17.390 に答える
0

出力ファイルがすでに存在するかどうかを確認できます

for %%f in (*) do if %%f neq %~nx0 (
  if not exist "%OUTPUT_PATH%\%%~nf.avi" (
    set /a COUNT+=1
    echo Processing %%f, track=%%~nf.txt, btavi=test!COUNT!%%~xf
    %EXE_FILE% fg=FG_0S bd=BD_CC bt=CCMSPF btpp=None bta=Kalman btgen=RawTracks track=%TRACKS_PATH%\%%~nf.txt FGTrainFrames=125 btavi=%OUTPUT_PATH%\%%~nf.avi %%f
  )
)

IN(*)句が特定の拡張子を探すように制限されていると、より効率的になるように思われます。

于 2012-08-02T11:19:05.767 に答える