批处理脚本与检查选项
问题描述:
我试图让这个批处理脚本检查恢复,它没有处理,如果一个文件之前,并继续与它没有。即如果它处理了文件,则跳到下一个文件。我需要做什么才能做到这一点。感谢批处理脚本与检查选项
@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
答
您可以检查%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"
答
你可以检查,看看你的输出文件已经存在
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(*)子句被限制在寻找一个特定的扩展名,它可能会更有效率。
如果您选择的临时文件名不会与您的输出文件名冲突,那应该都很好。一个临时文件夹有一个问题,即一个简单的重命名不足,并且该移动可能跨越不同的卷(我不知道你的文件夹是如何设置的)。但是,你可以。我只是给出了一个建议,你不必完全按照我写的代码来使用代码。 – Joey 2012-08-02 12:30:17
是的,重命名应该在循环中。 – Joey 2012-08-02 13:44:53
你从哪里得到它,为什么?我不是一个心灵。 – Joey 2012-08-02 13:49:57