faq:dos [Sven-Of-Nine]

DOS

Wie scanne ich Archive auf einen Defekt ?

Die mit Abstand einfachste Methode ist ein Batchscript. Einfach den Code in eine Datei „scanzip.bat“ kopieren, die Pfade zu den Exen anpassen und fertig.

@ECHO OFF

REM Create Current Date and Time
SET MYDATE=%DATE:~-10%
SET MYTIME=%TIME:~0,8%
SET MYTIME=%MYTIME::=-%

REM Init LogFile and Tempfiles
SET MYLOG=scanlog_%MYDATE%_%MYTIME%.txt
SET USELESS="%TEMP%\USELESS.$$$"
ECHO. > %MYLOG%

REM Path to Commandlineversion
REM download 7za from http://downloads.sourceforge.net/sevenzip/7za442.zip
SET MYZIP="c:\batch\7za.exe"
SET MYRAR="c:\batch\rar.exe"

REM Check for ZipExe
IF NOT EXIST %MYZIP% GOTO :NOEXE %MYZIP%
IF NOT EXIST %MYRAR% GOTO :NOEXE %MYRAR%

REM ask User for basepath or use current
ECHO enter directory to scan [return for %CD%]
SET MYROOT=
SET /P MYROOT=
IF (%MYROOT%) EQU () SET MYROOT=%CD%
SET MYROOT=%MYROOT:"=%

REM Ask for Scanmode (Fast=Open and List Contents/Deep=CRC)
ECHO Scanmode (F)ast or (D)eep [Deep]
SET /P SCANMODE=
IF /I (%SCANMODE%) EQU (f) (SET SCANMODE=Fast) ELSE (SET SCANMODE=Deep)

REM Set ScanSwitches
IF /I (%SCANMODE%) EQU (Deep) (
SET SWZIP=t
SET SWRAR=t
) ELSE (
SET SWZIP=l
SET SWRAR=l
)

REM Add Command-Switch
SET MYZIP=%MYZIP% %SWZIP%
SET MYRAR=%MYRAR% %SWRAR%

REM Here we go
CLS
CALL :ADDLOG "--------------------------------------------------------------"
CALL :ADDLOG "Archive-Check 0.4                                      "
CALL :ADDLOG "--------------------------------------------------------------"
CALL :ADDLOG "RootDir : %MYROOT%"
CALL :ADDLOG "Mode    : %SCANMODE%"
CALL :ADDLOG "Logfile : %MYLOG%"
CALL :ADDLOG "--------------------------------------------------------------"
CALL :ADDLOG "RAREXE  : %MYRAR%"
CALL :ADDLOG "ZIPEXE  : %MYZIP%"
CALL :ADDLOG "--------------------------------------------------------------"
CALL :ADDLOG "Started : %TIME% / %DATE%"

SET /A FILECOUNT=0
SET /A OKCOUNT=0

REM SCAN ALL ARCHIVES FILES
FOR /R "%MYROOT%" %%f IN (*.rar) DO CALL :SCANRAR "%%f"
FOR /R "%MYROOT%" %%f IN (*.zip) DO CALL :SCANZIP "%%f"
FOR /R "%MYROOT%" %%f IN (*.7z) DO CALL :SCANZIP "%%f"

SET /A FAILCOUNT=%FILECOUNT% - %OKCOUNT%

CALL :ADDLOG "--------------------------------------------------------------"
CALL :ADDLOG "Files   :%FILECOUNT%
CALL :ADDLOG "OK      :%OKCOUNT%
CALL :ADDLOG "Corrupt :%FAILCOUNT%
CALL :ADDLOG "--------------------------------------------------------------"
CALL :ADDLOG "Stopped : %TIME% / %DATE%"
IF EXIST %USELESS% DEL %USELESS%
GOTO :EOF

REM ####################################################################
REM # Scan Archives
REM ####################################################################

:SCANZIP
SET FILE=%1
SET FILE=%FILE:"=%

CALL :INCREASE FILECOUNT

@CALL %MYZIP% "%FILE%" > %USELESS%
SET /A ERROR=%ERRORLEVEL%

REM Log and Remove
IF %ERROR% EQU 0 CALL :INCREASE OKCOUNT
IF %ERROR% EQU 0 CALL :ADDLOG "%FILE% OK"
IF %ERROR% NEQ 0 CALL :REMOVEIT "%FILE%"
GOTO :EOF

REM ####################################################################
:SCANRAR
SET FILE=%1
SET FILE=%FILE:"=%

CALL :INCREASE FILECOUNT

@CALL %MYRAR% "%FILE%" > %USELESS%
SET /A ERROR=%ERRORLEVEL%

REM Log and Remove
IF %ERROR% EQU 0 CALL :INCREASE OKCOUNT
IF %ERROR% EQU 0 CALL :ADDLOG "%FILE% OK"
IF %ERROR% NEQ 0 CALL :REMOVEIT "%FILE%"
GOTO :EOF

REM ####################################################################
REM #Subfunktions
REM ####################################################################

:REMOVEIT
SET FILE=%1
SET FILE=%FILE:"=%

REM Uncomment DEL to remove corrupt files
CALL :ADDLOG "%FILE% CORRUPT"
REM DEL %FILE%
GOTO :EOF

:INCREASE
SET /A %1=%1 + 1
GOTO :EOF

:NOEXE
ECHO %1 not found
PAUSE
GOTO :EOF

:ADDLOG
SET LOGOUT=%1
SET LOGOUT=%LOGOUT:"=%

ECHO %LOGOUT%
ECHO %LOGOUT% >> %MYLOG%

GOTO :EOF

faq/dos.txt · Zuletzt geändert: 2010/05/27 18:44 von Sven Of Nine