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 回答