Gå til innhold

Batch fil som erstatter filer over en hvis størrelse


Anbefalte innlegg

Trenger hjelp til å lage en batch fil som erstatter filer over en hvis størrelse.

Altså hvis fil.a i c:\ ikke eksistrer eller er over/under en hvis størrelse så skal C:\Backup\fil.a erstatte denne.

 

Noen som kan hjelpe meg?

 

Har laget følgende så langt :new_woot:

@ECHO OFF

:STRT

if not exist C:\fil.a Copy C:\Backup\fil.a C:\fil.a

GOTO STRT

Lenke til kommentar
  • 2 uker senere...
Videoannonse
Annonse

Her har du et forslag - har lagt på litt kommentarer. Viser bruk av "subrutiner" i batch filer, ugh.

Selve sjekk på filstørrelse skjer ved hjelp av %~z1. Da hentes filstørrelsen til fil i %1. Se call /? for mer info om hva annet %1 (%2, %3...) kan konverteres til.

 

 

	@ECHO off
SET fileToCheck="c:\test\file1"
SET fileToReplaceWith="c:\test\file2"
SET maxSize=1000000

REM Calls batch subroutine with parameters, which ends up as %1, %2, %3 inside the sub
call :ReplaceFileIfMissingOrTooSmall %fileToCheck% %fileToReplaceWith% %maxSize%
GOTO :END


:ReplaceFileIfMissingOrTooSmall
IF not EXIST %1 ( 
	ECHO "file (%1) does not exist.."
	call :DoReplaceFile %1 %2
	GOTO :CheckDone
) 
IF  %~z1 GTR %3 ( 
	ECHO "file is %~z1 bytes big..Bigger than maxsize (%3)..replacing";
	call :DoReplaceFile %1 %2
	GOTO :CheckDone
) 
:CheckDone	
REM heh, we have to "GOTO" eof label to return from sub..ah well..
GOTO :EOF
:EOF   


REM Replaces (copies) file %2 with file %1
:DoReplaceFile
ECHO "replacing file (%1) with (%2)"
COPY %2 %1
GOTO :EOF
:EOF

:END

Lenke til kommentar

Takker for hjelpen, men lurer på en liten ting til?

Hvordan velger jeg at filen skal være på en minimum størrelse og ikke en maksimum størrelse?

 

Altså hvis file1 er under en byte så skal den erstattes med file2.

 

Takker for hjelpen nok en gang, er ingen kløpper på programmering som du skjønner :blush:.

 

PS. Fikk det til nå :D (koden skal også loope), og ser ut som koden under virker bra:

@ECHO OFF

:STRT

SET fileToCheck="c:\test\file1"
SET fileToReplaceWith="c:\test\file2"
SET minSize=1

REM Calls batch subroutine with parameters, which ends up as %1, %2, %3 inside the sub
call :ReplaceFileIfMissingOrTooSmall %fileToCheck% %fileToReplaceWith% %minSize%
GOTO :END


:ReplaceFileIfMissingOrTooSmall
IF not EXIST %1 ( 
	ECHO "file (%1) does not exist.."
	call :DoReplaceFile %1 %2
	GOTO :CheckDone
) 
IF  %~z1 LSS %3 ( 
	ECHO "file is %~z1 bytes big..Smaller then minsize (%3)..replacing";
	call :DoReplaceFile %1 %2
	GOTO :CheckDone
) 
:CheckDone	
REM heh, we have to "GOTO" eof label to return from sub..ah well..
GOTO :EOF
:EOF   


REM Replaces (copies) file %2 with file %1
:DoReplaceFile
ECHO "replacing file (%1) with (%2)"
COPY %2 %1
GOTO :EOF
:EOF

:END

GOTO STRT

Endret av MacBain
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...