2012-07-25 48 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%