52188
Goto Top

Batch - Variable soll erhöht werden und bei 10 abbrechen

BackUp-Batch mit eingebauter Abbruchbedinung - Aber wie?

Hallo, hab folgendes Problem. Ich hab ne Batch geschrieben, die ne Datei lokal sichert, dann das Original überschreibt und dann en Service wieder startet. Nun hab ich das ganze mit XCOPY gemacht. Mit dem passenden Parameter kopiert der Befehl ja solange, bis die Datei vollständig ist. Nun kann es ja passieren, dass das ne ganze Nacht lang so geht, also brauch ich ne Abbruch-Bedingung. Habe da an einen Counter gedacht, der nach xcopy überprüft, ob die Datei vollstädnig ist und wenn nicht, 1 hochzählt. Wobei ja xcopy solange kopiert, bis die Datei vollständig ist. Naja, meine Frage ist jetzt wie ich das anstelle mit dem Counter?

Das ist mein kompletter Quellcode
set /A counter_a=0
set /A counter_b=0

@echo off
@echo [%date% %time%] [FFM] GSX-Monitoring-Synchronizer V1.2
@echo [%date% %time%] [FFM] Created by XXX
echo [%date% %time%] -----------------------------------------------  >> d:\test\sync_log.txt
echo [%date% %time%] [FFM] Start GSX-Monitoring-Synchronizer V1.2 >> d:\test\sync_log.txt
@echo [%date% %time%] .
@echo [%date% %time%] .
@echo [%date% %time%] .
goto make_dir

:make_dir
rem & counter_a=counter_a+1
rem if %%~ counter_a == 10 @echo [%date% %time%] [USA] Attention! Can't create directory! Program will be closed & echo [%date% %time%] [USA] Attention! Can't create directory! Program will be closed  >> d:\test\sync_log.txt & goto end_fail  
@echo [%date% %time%] [USA] Creating temp_backup 
mkdir d:\test_2\temp_backup && echo [%date% %time%] [USA] Create temp_backup  >> d:\test\sync_log.txt

:backup_start
  if "%counter_b%" == "10" @echo [%date% %time%] [USA] Attention! Can't backup! Program will be closed & echo [%date% %time%] [USA] Attention! Can't backup! Program will be closed  >> d:\test\sync_log.txt & goto end_fail  
  pause
  @echo [%date% %time%] [USA] Start backup process...
  echo [%date% %time%] [USA] Start backup process... >> d:\test\sync_log.txt  
  @echo [%date% %time%] [USA] Efforts: %counter_b%
  echo [%date% %time%] [USA] Efforts: %counter_b% >> d:\test\sync_log.txt 
  xcopy /V /Y d:\test_2\test.txt d:\test_2\temp_backup\
  @echo [%date% %time%] [USA] Check possible differences...
  for  %%I in ("d:\test_2\test.txt") do (  
  for  %%J in ("d:\test_2\temp_backup\test.txt") do (  
  if %%~zI == %%~zJ @echo [%date% %time%] [USA] Backup successfully! & echo [%date% %time%] [USA] Backup successfully!>> d:\test\sync_log.txt & goto copy_start))
  for  %%I in ("d:\test_2\test.txt") do (  
  for  %%J in ("d:\test_2\temp_backup\test.txt") do (  
  if not %%~zI == %%~zJ @echo [%date% %time%] [USA] Backup fails! & echo [%date% %time%] [USA] Backup fails! >> d:\test\sync_log.txt & set /A counter_b=%counter_b+1% & goto backup_start))

:copy_start
  rem netsvc "dienst" \\Servername /stop && @echo [%date% %time%] [USA] Stop GSX-Monitoring-Service... && echo [%date% %time%] [USA] Stop GSX-Monitoring-Service... >> d:\test\sync_log.txt  
  @echo [%date% %time%] [FFM to USA] Copying test.txt from FFM to USA
  @echo [%date% %time%] [FFM to USA] Start copy process...
  echo [%date% %time%] [FFM to USA] Start copy process... >> d:\test\sync_log.txt
  xcopy /V /Y d:\test\test.txt d:\test_2
  @echo [%date% %time%] [FFM - USA] Check possible differences...
  for  %%I in ("d:\test\test.txt") do (  
  for  %%J in ("d:\test_2\test.txt") do (  
  if %%~zI == %%~zJ echo [%date% %time%] [FFM to USA] Replaceing successfully!>> d:\test\sync_log.txt & @echo [%date% %time%] [FFM to USA] Replaceing successfully! & goto end))
  for  %%I in ("d:\test\test.txt") do (  
  for  %%J in ("d:\test_2\test.txtt") do (  
  if not %%~zI == %%~zJ echo [%date% %time%] [FFM to USA] Replaceing fails! >> d:\test\sync_log.txt & @echo [%date% %time%] [FFM to USA] Replaceing fails! & goto copy_start))

:end
  rem netsvc "dienst" \\Servername /start && @echo [%date% %time%] [USA] Start GSX-Monitoring-Service... && echo [%date% %time%] [USA] Start GSX-Monitoring-Service... >> d:\test\sync_log.txt  
  @echo [%date% %time%] [FFM to USA] Copy process finished...
  echo [%date% %time%] [FFM to USA] Copy process finished... >> d:\test\sync_log.txt
  rd /S /Q "d:\test_2\temp_backup\" && echo [%date% %time%] [USA] Delete temp_backup >> d:\test\sync_log.txt  
  @echo [%date% %time%] [FFM] GSX-Monitoring-Synchronizer V1.2 finished!
  echo [%date% %time%] [FFM] GSX-Monitoring-Synchronizer V1.2 finished! >> d:\test\sync_log.txt
  For /L %%i in (1,1,10) do ((ping -n 2 localhost>nul) && Echo Window close in %%i of 10 seconds))
  
:end_fail
  For /L %%i in (1,1,10) do ((ping -n 2 localhost>nul) && Echo Failer! Window close in %%i of 10 seconds))

Content-Key: 68258

Url: https://administrator.de/contentid/68258

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: bastla
bastla 10.09.2007 um 12:07:52 Uhr
Goto Top
Hallo wurzel87!

Zum Hochzählen sollte ein
set /a counter_a+=1
genügen. Für den Vergleich kannst Du dann
if %counter_a% equ 10 ...
nehmen.

Grüße
bastla