2012-07-25 45 views
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 OUTPUT_PATH=E:\Glasgow\Result\ 
    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 btavi=%OUTPUT_PATH%\%%~nf.avi %%f 
    ) 
    popd` 
+1

如何购买能跟上您生产的数据的磁盘?现在存储空间很便宜。 – Joey 2012-07-25 12:10:29

回答

0

考虑以下几点:

`@echo off 
    set drive="E" 
    set /A size=99 
    FOR /F "tokens=1-5" %G IN ('dir ^| find "Dir(s)"') do set size=%I 
    echo %size% > currentsize.txt 
    echo %size% >> sizelog.log 
    FOR /F "tokens=1-5" %G IN ('dir ^| find "currentsize.txt"') do set /A size=%J 

REM SIZE LESS THAN 4 INDICATES LESS THAN 1024 Bytes left on the disk. 
    IF %size% LSS 4 set drive="F" 

    setlocal enabledelayedexpansion 
    set EXE_FILE=%drive%:\opencv\build\bin\Release\blobtrack_sample.exe 
    set INPUT_PATH=%drive%:\Glasgow\Test\ 
    set TRACKS_PATH=%drive%:\Glasgow\Tracks\ 
    set OUTPUT_PATH=%drive%:\Glasgow\Result\ 
    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 btavi=%OUTPUT_PATH%\%%~nf.avi %%f 
    ) 
    popd` 
+0

你能详细说明这段代码的工作原理吗? – Booboo 2012-07-26 11:32:09

+0

它将变量'drive'设置为首字母E.然后检查命令dir的输出。此命令默认提供有关输出最后一行中的可用空间的信息。我采取这条线,并用空格分开。第三个字包含剩余的字节数。我将这个数字作为变量并将其传递给文件。取决于数字的长度,您可以假定剩下多少空间。如果输出文件的大小小于4,则意味着剩余的空间是以字节为单位的3位数 - 这非常小。比如它将驱动器更改为F. – mnmnc 2012-07-26 12:31:51

+0

如果我想将其更改为'K',例如,我更改了哪部分代码 – Booboo 2012-07-26 13:10:42

0

我发现这个代码this answer。我建议你阅读那里的所有答案,你会发现一些工作与

保存folling在一个批处理文件并运行它。它将显示C:驱动器的空闲字节。在IF条件下使用该变量来更改目标保存到驱动器

@setlocal enableextensions enabledelayedexpansion 
@echo off 
for /f "tokens=3" %%a in ('dir c:\') do (
    set bytesfree=%%a 
) 
set bytesfree=%bytesfree:,=% 
echo %bytesfree% 
endlocal && set bytesfree=%bytesfree%