带有检查选项的批处理脚本

时间:2012-08-02 10:13:39

标签: windows batch-file

我试图让这个批处理脚本检查恢复它是否曾经处理过一个文件并继续处理它没有的文件。即如果已处理文件,请跳至下一个文件。我需要做什么才能做到这一点。感谢

@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

2 个答案:

答案 0 :(得分: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
)

但这有一个小问题。如果在写入文件的中间处理中断了一些reasin,则有半个文件无法再次处理,因为您将存在等同于完成

更强大的方法是首先写入临时文件,然后重命名它:

%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"

答案 1 :(得分: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(*)子​​句被限制在寻找特定的扩展名,它可能会更有效。