Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Dateien für Synchronisation löschen (.cmd)

Frage Entwicklung Batch & Shell

Mitglied: s0335999

s0335999 (Level 1) - Jetzt verbinden

15.06.2007, aktualisiert 05.07.2007, 7279 Aufrufe, 50 Kommentare

Hi,

folgendes Problem:

nach langer recherche steht fest das robocopy die synchronisation gelöschter dateien (beidseitig) nicht durchführen kann.

darum möchte ich vor der eigentlichen Synchronisation mit robocopy mittels .cmd die gelöschten Dateien jeweils auf beiden Seiten löschen lassen.

Dafür mache ich mit robocopy zunächst ein backup (beidseitig).

Jetzt muss das script kommen, wie folgt:

Ist die Datei aus dem Backup-Q (Quelle) im eigentlichen Sync Ordner der Quelle nicht mehr vorhanden dann lösche die Datei aus dem Sync Ordner des Ziels und aus dem Backup des Ziels. Ansonsten mach nix und geh zur nächsten Datei im Backup-Q.

und das ganze noch mal aber dann ebend von der anderen Seite.

Leider hab ich da so meine Schwierigkeiten mit ner .cmd. Schon allein weil es ja um viele Verzeichnisse mit Dateien geht.

Wäre net wenn hier einer ein paar Zeilen posten könnte.

thx u. cu sentinel

(schon vorab, ich kann aus verschiedenen Gründen nur robocopy nutzen)
50 Antworten
Mitglied: 13100
15.06.2007 um 16:01 Uhr
wenn robocopy gelöschte dateien nich syncronisiert, warum muss man sie dann vorher löschen.
Bitte warten ..
Mitglied: miniversum
15.06.2007 um 16:27 Uhr
Versuchs mal so:
01.
set "quelle=d:\quelle" 
02.
set "ziel=d:\ziel" 
03.
REM Für Verzeichnisse 
04.
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%ziel%"') do if NOT exist "%quelle%\%%a"\NUL RD /Q /S "%ziel%%%a" 
05.
REM Für Dateien 
06.
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %ziel%') do if NOT exist "%quelle%\%%a" del /Q /S "%ziel%%%a"
miniversum
Bitte warten ..
Mitglied: s0335999
16.06.2007 um 15:30 Uhr
hi,
ich hab bei der synchronisation 2 seiten. d.h. die gelöschten dateien auf der quelle muss ich auch im ziel löschen und genauso dann andersrum. ansonsten schlepp ich immer mehr datenmüll mit.


cu sentinel
Bitte warten ..
Mitglied: 13100
16.06.2007 um 19:01 Uhr
hab da was anders verstanden - wer dann ziehmlich schizo gewesen.

was passiert dann eigentlich, wenn auf seite A die datei glelöscht wurde
und auf seite B die selbe geupdatet wurde (oder von mir aus auch genau
umgekehrt)? würde dann nich was schieflaufen oder seh ich schon wieder
den wald vor lauter bäumen nich.

... oder is dat für den vorliegenden fall nich relevant, weil es nich im bereich
des möglichen liegt.
Bitte warten ..
Mitglied: s0335999
17.06.2007 um 09:47 Uhr
hi,
das ist sicherlich ein problem. ich müsste somit noch mit in das script einfügen, dass die zulöschende datei im ziel nicht jünger sein darf bzw. gleich sein muss vom inhalt oder groesse.

wie gesagt besonders fit bin ich im cmd nicht ;)

cu sentinel
Bitte warten ..
Mitglied: s0335999
17.06.2007 um 09:53 Uhr
hi,
thx erstmal. montag werd ich das mal probieren. wäre es möglich da noch einzufügen, dass die datei im ziel nicht jünger ist bzw. irgendein anderes merkmal um zu verhindern was Angeldust geschrieben hat.

cu sentinel
Bitte warten ..
Mitglied: s0335999
17.06.2007 um 10:00 Uhr
hi,
beim ersten drüberschauen: einen vergleich mit dem backup der quelle machst du nicht? weil jetzt wird ja jede nicht vorhandene datei im ziel gelöscht, d.h. auch jede neu erstellte im ziel. Genau das ist auch mein problem mit robocopy. deshalb möchte ich vorher schauen ob die im backup vorhanden ist.

grundsätzlich immer ganz dolles danke. nicht das ich hier unhöflich erscheine ;)

cu sentinel
Bitte warten ..
Mitglied: miniversum
17.06.2007 um 13:23 Uhr
Also:
Um dieses Problem erklären hier die Lösung.
Die syncronisation geht nur in eine Richtung. Du willst also %ziel% auf den gleichen Stand wie %quelle% bringen.
Das von mir gepostete war ja nur der Löschteil. DAVOR kommt der Kopierteil. Nach dem kopieren gibt es ja alle Dateien die upgedatet wurden und so braucht auch keine davon mehr gelöscht werden.
Als ganzes würde es also so aussehen:
01.
set "quelle=d:\quelle" 
02.
set "ziel=d:\ziel" 
03.
 
04.
REM Kopieren 
05.
xcopy "%quelle%" "%ziel%" /c /s /e /r /v /d /y /i /h /f /o /x 
06.
 
07.
REM Nicht existierende Verzeichnisse löschen 
08.
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%ziel%"') do if NOT exist "%quelle%\%%a"\NUL RD /Q /S "%ziel%%%a" 
09.
 
10.
REM Nicht existierende Dateien löschen 
11.
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %ziel%') do if NOT exist "%quelle%\%%a" del /Q /S "%ziel%%%a"
Wenn du mal schaust, hier im Bereich Batch und Shell gibt es auch eine quick n dirty Lösung von Biber glaube ich zur syncronisation.

Eine beidseitige syncronisation würde ja bedeuten das du unterscheiden mußt ob eine Datei zuerst gelöscht oder geupdatet wurde auf den beiden jeweiligen Seiten. Du müßtest also jede Löschaktion mitloggen um diese Zeiten dan vergleichen zu können. Du kannst nur eben in eine richtung syncronisieren oder das löschen weglassen im Zweifelsfall.

miniversum
Bitte warten ..
Mitglied: s0335999
18.06.2007 um 09:02 Uhr
hi,

wenn ich dich jetzt richtig verstanden habe, dann haben wir uns missverstanden ;).

Ich möchte eben gerade eine beidseite Synchronisation vornehmen. d.h. alle gelöschten Dateien sollen auch auf beiden Seiten gelöscht werden. Aber bei deiner Lösung werden die neu erstellten Dateien im Ziel einfach gelöscht. Deshalb verzichte ich nachfolgend ganz bewusst auf den Begriff Quelle und Ziel:

Ich beschreib mal den kompletten Vorgang etwas detaillierter:

:: Notwendige Struktur:

1a) Backup SeiteA
1b) SyncOrdner SeiteA

2a) Backup SeiteB
2b) SyncOrdner SeiteB


:: Ablauf:

Robocopy legt Backup SeiteA an und Backup SeiteB an.
Es vergehen ca. 2 Tage.

:: Es erfolgt das Entfernen aus SyncOrdner SeiteB von den Dateien die im SyncOrdner SeiteA gelöscht wurden:
d.h. Ist die Datei aus Backup SeiteA nicht mehr in SyncOrdner SeiteA vorhanden dann lösche diese im SyncOrdner SeiteB.

:: Es erfolgt das Entfernen aus SyncOrdner SeiteA von den Dateien die im SyncOrdner SeiteB gelöscht wurden:
d.h. Ist die Datei aus Backup SeiteB nicht mehr in SyncOrdner SeiteB vorhanden dann lösche diese im SyncOrdner SeiteA.

Dann erfolgt die eigentliche Synchronisation mit Robocopy: d.h. es werden die Dateien abgeglichen und neue Dateien kopiert.

Zum Schluss erstellt Robocopy wieder ein Backup von SeiteA und von SeiteB.


Ich hoffe jetzt nicht zu verwirren, aber eigentlich brauche ich nur ein Backup, da ja Backup SeiteA und Backup SeiteB immer gleich sein sollten.

Ok ich hoffe das is verständlicher. Ich hab immer so meine Schwierigkeiten so ne' Problematiken zu beschreiben. Also gerne immer nachfragen.

Die Quick Lösung von Biber ist leider auch nur eine einseitige Sychronisation.

Zitat: "Eine beidseitige syncronisation würde ja bedeuten das du unterscheiden mußt ob eine Datei zuerst gelöscht oder geupdatet wurde auf den beiden jeweiligen Seiten."

Genau dafür brauch ich den Abgleich mit dem Backup.




Puh das war's erstmal.


cu sentinel
Bitte warten ..
Mitglied: miniversum
18.06.2007 um 09:51 Uhr
Ok dan mach ich mal die Skitze vonmeinem Code nicht mit den Variabeln quelle und ziel sondern mit den von Dir verwendeten Bezeichnungen...

:: Es erfolgt das Entfernen aus SyncOrdner
SeiteB von den Dateien die im SyncOrdner
SeiteA gelöscht wurden:
d.h. Ist die Datei aus Backup SeiteA nicht
mehr in SyncOrdner SeiteA vorhanden dann
lösche diese im SyncOrdner SeiteB.

01.
REM Nicht existierende Verzeichnisse löschen 
02.
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%BackupSeiteA%"') do if NOT exist "%SyncOrdnerSeiteA%\%%a"\NUL RD /Q /S "%SyncOrdnerSeiteB%%%a" 
03.
REM Nicht existierende Dateien löschen 
04.
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BackupSeiteA%') do if NOT exist "%SyncOrdnerSeiteA%\%%a" del /Q /S "%SyncOrdnerSeiteB%%%a"
:: Es erfolgt das Entfernen aus SyncOrdner
SeiteA von den Dateien die im SyncOrdner
SeiteB gelöscht wurden:
d.h. Ist die Datei aus Backup SeiteB nicht
mehr in SyncOrdner SeiteB vorhanden dann
lösche diese im SyncOrdner SeiteA.

01.
REM Nicht existierende Verzeichnisse löschen 
02.
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%BackupSeiteB%"') do if NOT exist "%SyncOrdnerSeiteB%\%%a"\NUL RD /Q /S "%SyncOrdnerSeiteA%%%a" 
03.
REM Nicht existierende Dateien löschen 
04.
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BackupSeiteB%') do if NOT exist "%SyncOrdnerSeiteB%\%%a" del /Q /S "%SyncOrdnerSeiteA%%%a"
ich hoffe das hilft dir weiter

miniversum
Bitte warten ..
Mitglied: s0335999
18.06.2007 um 13:53 Uhr
hi,
thx erstmal.

hab's mal durchlaufen lassen.
irgendwie haut das noch nicht hin mit der Übergabe der zu vergleichenden Datei bzw. der Pfad wird immer mitgenommen.

E:\roboscri\Zrobo>if NOT exist "E:\Robo1\\Robo1Back\234.mdb" del /Q /S \\192.168.0.240\SharedDocs\ziel\Robo1Back\234.mdb"
Das System kann die angegebene Datei nicht finden.


cu sentinel
Bitte warten ..
Mitglied: miniversum
18.06.2007 um 15:42 Uhr
Welcher Pfad wird mitgenommen?
gehts so?
REM Nicht existierende Verzeichnisse löschen
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%BackupSeiteA%"') do if NOT exist "%SyncOrdnerSeiteA%\%%a"\NUL RD /Q /S "%SyncOrdnerSeiteB%%%~nxa"
REM Nicht existierende Dateien löschen
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BackupSeiteA%') do if NOT exist "%SyncOrdnerSeiteA%\%%a" del /Q /S "%SyncOrdnerSeiteB%%%~nxa"

miniversum
Bitte warten ..
Mitglied: s0335999
18.06.2007 um 16:06 Uhr
hi,

bei deiner Lösung ist es fast das gleiche problem. aber ich habs wohl gefunden:

hinter ziel ein backslash und delims=\ und tokens=3.

set "SEITEA=E:\Robo1"
set "BACKUP=E:\Robo1Back
set "SEITEB=\\192.168.0.240\SharedDocs\ziel\"

REM Nicht existierende Dateien löschen
for /F "delims=\ tokens=3" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist "%SEITEA%\%%a" del /Q /S "%SEITEB%%%a"

Ist nur die Frage ob das so sauber ist.

cu sentinel
Bitte warten ..
Mitglied: miniversum
18.06.2007 um 16:56 Uhr
Achhab ja ganz übersehen das das %SEITEB% bei dir ein Netzlaufwerk ist.
Ich habe diese Schematik für ein Laufwerk gemacht die einen Buchstaben am Anfang hat, bzw. davon ausgeht das das Laufwerk auf einen Buchstaben gemapt wurde.

Ich hatte das ganze mal in einem ähnlichen Zusammenhang zum Syncronisieren verwendet (vielleicht hilfts ja):
01.
@echo off 
02.
set src=F:\quelle 
03.
set dst=F:\ziel 
04.
set log="F:\SyncLog %date%.txt" 
05.
 
06.
echo Log vom: %Date% %Time% >> %log% 
07.
echo Dateien werden kopiert: >> %log% 
08.
 
09.
if %src:~-1%==\ set src=%src:~0,-1% 
10.
xcopy "%src%" "%dst%" /c /s /e /r /v /d /y /i /h /f /o /x >> %log% 
11.
 
12.
echo Dateien werden geloescht: >> %log% 
13.
 
14.
for %%L in (d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %%L:\NUL set LWdst=%%L: 
15.
Subst %LWdst% "%dst%" 
16.
for /R %LWdst%\ %%i in ("*.*") do @FC "%%i" "%src%%%~pnxi" >nul || del /s /q "%%i" && echo %%i>>%log% 
17.
Subst %LWdst% /D
miniversum
Bitte warten ..
Mitglied: s0335999
18.06.2007 um 17:03 Uhr
hi miniversum,

großes thx. bin doch jetzt ein ganzes stück weiter. und es wird auch alles gelöscht. nur leider noch 1 Problem:
wenn nähmlich die Datei mit dem gleichen Namen in einem anderen Ordner vorhanden ist, wird die gleich mitgelöscht.

ist die frage ob man das so lässt oder nur drauf hinweisst in der Logdatei.

cu sentinel.
Bitte warten ..
Mitglied: miniversum
18.06.2007 um 17:38 Uhr
wie sieht den deine Batch aus?
ich weiß grade garnich was du bei dir verändert hast...

miniversum
Bitte warten ..
Mitglied: s0335999
25.06.2007 um 12:59 Uhr
hi,

sorry war mal ne weile weg. ich werd heut nochmal ein bisschen testen.

@echo off

set "SITEA1=E:\Robo1"
set "BACKUP=E:\Robo1Back
set "SITEB1=\\192.168.0.240\SharedDocs\ziel\"

set "SITEA2=E:\Robo1\"
set "BACKUP=E:\Robo1Back\

set "SITEB2=\\192.168.0.240\SharedDocs\ziel"


net use \\192.168.0.240\ipc$ xyz /user:xyz

@echo on
REM Nicht existierende Verzeichnisse löschen siteA-siteB
for /F "delims=\ tokens=3" %%a in ('dir /s /b /ad %BACKUP%') do if NOT exist "%SITEA1%\%%a" RD /Q /s "%SITEB1%%%a"
@echo on
REM Nicht existierende Dateien löschen siteA-siteB
for /F "delims=\ tokens=3" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist "%SITEA1%\%%a" del /Q /s /f "%SITEB1%%%a"

@echo on
REM Nicht existierende Verzeichnisse löschen siteB-siteA
for /F "delims=\ tokens=3" %%a in ('dir /s /b /ad "%BACKUP%"') do if NOT exist "%SITEB2%\%%a" RD /Q /s "%SITEA2%%%a"
@echo on
REM Nicht existierende Dateien löschen siteB-siteA
for /F "delims=\ tokens=3" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist "%SITEB2%\%%a" del /Q /s /f "%SITEA2%%%a"


net use \\192.168.0.240\ipc$ /del

sync
Bitte warten ..
Mitglied: s0335999
25.06.2007 um 13:07 Uhr
Hi,

ich hab jetzt versucht mit dem kompletten verzeichnissbaum zu arbeiten. leider werden dateien aus dem unterverzeichnis vom backup nicht berücksichtigt. was muss ich dafür tun? den kompletten verzeichnisbaum durchsuchen und dann übergeben oder wie?

cu sentinel
Bitte warten ..
Mitglied: s0335999
25.06.2007 um 14:47 Uhr
hi,

ich versuch das problem mal einzugrenzen. folgendes problem:

bei diesem script:

@echo on

set "SITEA=E:\Robo1"
set "BACKUP=E:\Robo1Back"
set "SITEB=E:\Robo2\"


echo on
REM Nicht existierende Dateien löschen

for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist
"%SITEA%\%%a" del /Q /S "%SITEB%%%a"

pause

passiert folgendes:

E:\roboscri\Kopie von robocopy 070618>if NOT exist "E:\Robo1\\Robo1Back\del.cmd" del /Q /S "E:\Robo2\\Robo1Back\del.cmd"
Das System kann die angegebene Datei nicht finden.


Es wird immer \\Robo1Back mit in den Pfad übernommen. Aber warum bzw. wie kann ich das abstellen?

cu sentinel
Bitte warten ..
Mitglied: miniversum
25.06.2007 um 15:30 Uhr
Ah ups das war ein Fehler von mir. klar. Mit
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist "%SITEA%\%%a" del /Q /S "%SITEA%%%a"
Sollte es gehen.
So wird überprüft ob die dateien unter %BACKUP% auch in %SITEA% enthalten sind und wenn nicht in %SITEA% gelöscht.
%SITEA% enthält dann also keine Dateien mehr die nicht auch in %BACKUP% existieren.
willst du ein Netzlaufwerk einbinden solltest du es als Buchstabe mappen. Sonst funktionier der aufruf so nicht.
Kannst ja grade mit dem Net use, das du sowieso schon drin hast den Buchstaben hinzufügen lassen der nicht belegt ist. Daher auch das Schema was ich schonmal gepostet hatte.
Im ganzen also dan wenns mal lokal geht später auch so:

REM Freien Laufwerksbuschstaben suchen und Netzlaufwerk zuweisen
for %%L in (d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %%L:\NUL set LW=%%L:
net use %LW% \\192.168.0.240\ipc$ xyz /user:xyz
set "SITEA1=E:\Robo1"
set "BACKUP=E:\Robo1Back
set "SITEB1=%LW%\SharedDocs\ziel\"

for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist "%SITEA%\%%a" del /Q /S "%SITEA%%%a"
...
...
net use %LW% \\192.168.0.240\ipc$ /del

miniversum
Bitte warten ..
Mitglied: s0335999
26.06.2007 um 10:33 Uhr
Hi,

ähh jetzt versteh ich gar nix mehr????

for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist "%SITEA%\%%a" del /Q /S "%SITEA%%%a"

Fehlermeldung:

E:\roboscri\Kopie von robocopy 070618>if NOT exist "E:\Robo1\\Robo1Back\del.cmd" del /Q /S "E:\Robo1\Robo1Back\del.cmd"
Das System kann die angegebene Datei nicht finden.


Mal abgesehen davon das ich nicht verstehe wieso nicht vorhandene Dateien aus SITEA in SITEA gelöscht werden, bleibt das Problem mit dem falschen Pfad: "E:\Robo1\\Robo1Back\del.cmd"

\\Robo1Back\ hat dadrin einfach nix zu suchen. Wie krieg ich das den raus?


Mit dem einbinden des %LW% werd ich mal probieren.

thx u.

cu sentinel
Bitte warten ..
Mitglied: miniversum
26.06.2007 um 15:59 Uhr
hi,

ich versuch das problem mal einzugrenzen.
folgendes problem:

bei diesem script:

@echo on

set "SITEA=E:\Robo1"
set "BACKUP=E:\Robo1Back"
set "SITEB=E:\Robo2\"


echo on
REM Nicht existierende Dateien
löschen

for /F "delims=: tokens=2"
%%a in ('dir /s /b /a-d %BACKUP%')
do if NOT exist
"%SITEA%\%%a" del /Q /S
"%SITEB%%%a"

pause

passiert folgendes:

E:\roboscri\Kopie von robocopy 070618>if
NOT exist
"E:\Robo1\\Robo1Back\del.cmd" del
/Q /S
"E:\Robo2\\Robo1Back\del.cmd"
Das System kann die angegebene Datei nicht
finden.


Es wird immer \\Robo1Back mit in den Pfad
übernommen. Aber warum bzw. wie kann ich
das abstellen?

cu sentinel

So jetzt hab ichs bei mir durchgespielt und jetzt nochmal von vorne und dem ersten Ansatz überhaubt. (Ich komm ja schon selbst durcheinander.)
Also:

Dein Sets sehen so aus:
set "SITEA=E:\Robo1"
set "BACKUP=E:\Robo1Back"
set "SITEB=E:\Robo2"

dann funktioniert es so:
Vergleiche die Liste der die Verzeichnisse in %BACKUP% mit denen in %SITEA%. Existiert in %SITEA% ein Verzeichnis nicht das es in %BACKUP% gibt, dann lösche dieses Verzeichnis auch in %SITEB%. Der code dazu lautet:
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%BACKUP%"') do if NOT exist "%SITEA%\%%a"\NUL RD /Q /S "%SITEB%\%%a"
Das gleiche für Dateien:
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist "%SITEA%\%%a" del /Q /S "%SITEB%\%%a"

Hier wird jetzt davon ausgegangen das alle Pfade direkt als Laufwerke vorliegen.
Das erreicht du indem Du davor das hier machst:
01.
:: SITEA als Laufwerke einbinden 
02.
for %%L in (d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %%L:\>NUL set LWSITEA=%%L: 
03.
if %LWSITEA%.==. ( 
04.
  echo. 
05.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.  
06.
  Pause 
07.
  goto:eof 
08.
09.
if (%SITEA:~2,1%)==(:) subst %LWSITEA% %SITEA% > NUL 
10.
if (%SITEA:~2,1%)==(\) net use %LWSITEA% %SITEA% > NUL 
11.
 
12.
:: BACKUP als Laufwerke einbinden 
13.
for %%L in (d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %%L:\>NUL set LWBACKUP=%%L: 
14.
if %LWBACKUP%.==. ( 
15.
  echo. 
16.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.  
17.
  Pause 
18.
  goto:eof 
19.
20.
if (%BACKUP:~2,1%)==(:) subst %LWBACKUP% %BACKUP% > NUL 
21.
if (%BACKUP:~2,1%)==(\) net use %LWBACKUP% %BACKUP% > NUL 
22.
 
23.
:: SITEB als Laufwerke einbinden 
24.
for %%L in (d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %%L:\>NUL set LWSITEB=%%L: 
25.
if %LWSITEB%.==. ( 
26.
  echo. 
27.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.  
28.
  Pause 
29.
  goto:eof 
30.
31.
if (%SITEB:~2,1%)==(:) subst %LWSITEB% %SITEB% > NUL 
32.
if (%SITEB:~2,1%)==(\) net use %LWSITEB% %SITEB% > NUL
und am Ende kannst du das dan wieder entfernen mit:
subst %LWSITEA% /D > NUL
net use %LWSITEA% /Delete > NUL
subst %LWBACKUP% /D > NUL
net use %LWBACKUP% /Delete > NUL
subst %LWSITEB% /D > NUL
net use %LWSITEB% /Delete > NUL

Im Ganzen gibt das also dann sowas:
01.
@echo off 
02.
set "SITEA=E:\Robo1" 
03.
set "BACKUP=E:\Robo1Back" 
04.
set "SITEB=E:\Robo2" 
05.
 
06.
:: ---------------------Verzeichnisse aus Laufwerke einbinden ----------------------------------- 
07.
:: SITEA als Laufwerke einbinden 
08.
for %%L in (d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %%L:\NUL set LWSITEA=%%L: 
09.
if %LWSITEA%.==. ( 
10.
  echo. 
11.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.  
12.
  Pause 
13.
  goto:eof 
14.
15.
if (%SITEA:~2,1%)==(:) subst %LWSITEA% %SITEA% > NUL 
16.
if (%SITEA:~2,1%)==(\) net use %LWSITEA% %SITEA% > NUL 
17.
 
18.
:: BACKUP als Laufwerke einbinden 
19.
for %%L in (d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %%L:\NUL set LWBACKUP=%%L: 
20.
if %LWBACKUP%.==. ( 
21.
  echo. 
22.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.  
23.
  Pause 
24.
  goto:eof 
25.
26.
if (%BACKUP:~2,1%)==(:) subst %LWBACKUP% %BACKUP% > NUL 
27.
if (%BACKUP:~2,1%)==(\) net use %LWBACKUP% %BACKUP% > NUL 
28.
 
29.
:: SITEB als Laufwerke einbinden 
30.
for %%L in (d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %%L:\NUL set LWSITEB=%%L: 
31.
if %LWSITEB%.==. ( 
32.
  echo. 
33.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.  
34.
  Pause 
35.
  goto:eof 
36.
37.
if (%SITEB:~2,1%)==(:) subst %LWSITEB% %SITEB% > NUL 
38.
if (%SITEB:~2,1%)==(\) net use %LWSITEB% %SITEB% > NUL 
39.
 
40.
:: ----------------------- Verzeichnisse und Dateien loeschen ------------------------ 
41.
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%LWBACKUP%"') do if NOT exist "%LWSITEA%\%%a"\NUL RD /Q /S "%LWSITEB%\%%a" 
42.
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%\%%a" del /Q /S "%LWSITEB%\%%a" 
43.
 
44.
:: ------------------------------ Laufwerke Freigeben ------------------------------------ 
45.
subst %LWSITEA% /D > NUL 
46.
net use %LWSITEA% /Delete > NUL 
47.
subst %LWBACKUP% /D > NUL 
48.
net use %LWBACKUP% /Delete > NUL 
49.
subst %LWSITEB% /D > NUL 
50.
net use %LWSITEB% /Delete > NUL
Nach diesem Teil kommen dann die Kopieropperationen.
Das sollte dann auch mit Netzzlaufwerken funktionieren.

miniversum

Edit: Ach sowas Doofes. Ich sah grade.. Also sie Smilies sollen eigentlich Doppelpunkte und geschlossene Klammern sein. Also wie das (\) nur mit : statt \

Edit2: Unterverzeichnisse der Laufwerksbuchstaben werden verglichen.
Bitte warten ..
Mitglied: s0335999
26.06.2007 um 16:22 Uhr
Hi,

thx erstmal für die Mühe.

langsam zweifel ich an mir selber ;) aber:

wenn ich den eigentlichen Löschvorgang für die Dateien starte. also:

for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist "%SITEA%\%%a" del /Q /S "%SITEB%\%%a"

dann kommt:

E:\roboscri\Kopie von robocopy 070618>if NOT exist "E:\Robo1\\Robo1Back\del.cmd" del /Q /S "E:\Robo1\Robo1Back\del.cmd"
Das System kann die angegebene Datei nicht finden.


Hast du schonmal die for /F ... durchlaufen lassen? Vielleicht stell ich mich ja zu doof an.



Das mit dem Netzlaufwerk sieht gut aus, jedoch muss ich erstmal das o.g. Problem lösen.

thx und cu sentinel
Bitte warten ..
Mitglied: s0335999
26.06.2007 um 18:12 Uhr
hi,

beim zweiten lesen komm ich jetzt ins grübeln ;) und hoffe verstanden zu haben.

ich glaub du hast das gelöst über den laufwerksbuchstabe.

ich probier nochmal dein ganzes script.

cu sentinel
Bitte warten ..
Mitglied: miniversum
27.06.2007 um 10:50 Uhr
Genau!
Das ist der Trick an der Sache das du dann keine Unterverzeichnisse mehr hast sondern alles als Laufwerksbuchstaben. Egal ob Netzlaufwerk oder lokal.
Durch das "delims=: tokens=2" in der Forschleife verwende ich allerdings nur den Teil NACH dem : Dadurch ist das Vergleichen der Verzeichnisse wesentlich einfacher.

Ich habs auch doof erklärt. Bin halt ncith so gut im Erklären.

miniversum
Bitte warten ..
Mitglied: s0335999
27.06.2007 um 15:02 Uhr
Hi,

thx genau das war es, wobei hier und da kleine änderungen erforderlich waren z.B. \>NUL und der slash im %\%%a musste weg.

jetzt bin ich am feintuning. z.B. möchte ich in die logdateien reinschreiben welche Dateien gelöscht werde etc.

dann wünsch ich was und bis demnächst.

cu sentinel
Bitte warten ..
Mitglied: miniversum
27.06.2007 um 15:28 Uhr
Dann ists ja gut wenns so geht.
Also alle größeren Probleme erledigt.
Bitte warten ..
Mitglied: s0335999
27.06.2007 um 15:37 Uhr
hi,

doch eine kleine schwierigkeit: doppelt vorkommende dateien im gleichen Ordner jedoch unterschiedlichen Unterordnern werden gleich mitgelöscht:

wie hier:

E:\roboscri\Kopie von robocopy 070618>if NOT exist "E:\Robo1\Neu Bitmap.bmp" del /Q /S "\\192.168.0.240\SharedDocs\ziel\Neu B
itmap.bmp"
Datei wurde gelöscht - \\192.168.0.240\SharedDocs\ziel\Neu Bitmap.bmp
Datei wurde gelöscht - \\192.168.0.240\SharedDocs\ziel\Neuer Ordner\hier\Neu Bitmap.bmp
Datei wurde gelöscht - \\192.168.0.240\SharedDocs\ziel\Neuer Ordner (2)\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp

hast Du da eine Idee.

cu sentinel
Bitte warten ..
Mitglied: miniversum
27.06.2007 um 15:52 Uhr
Oh mir ist grade ein Fehler aufgefallen. Das hab ich ja ganz übersehen.
ändere mal das
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%BACKUP%"') do if NOT exist "%SITEA%\%%a"\NUL RD /Q /S "%SITEB%\%%a"
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %BACKUP%') do if NOT exist "%SITEA%\%%a" del /Q /S "%SITEB%\%%a"
in
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%LWBACKUP%"') do if NOT exist "%LWSITEA%\%%a"\NUL RD /Q /S "%LWSITEB%\%%a"
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%\%%a" del /Q /S "%LWSITEB%\%%a"


So dürfte das dann auch eingentlich nicht passieren, da der Vergleich ja inklusive der Unterverzeichnisse stattfindet. Oder hast du das geändert?
Im
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%\%%a" del /Q /S "%LWSITEB%\%%a"
wird ja dann über das 'dir /s /b /a-d %BACKUP%' eine Liste erzeugt die so aussieht:
K:\Neu Bitmap.bmp
K:\Neuer Ordner\hier\Neu Bitmap.bmp
K:\Neuer Ordner (2)\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
und durch das "delims=: tokens=2" wird nur der hintere Teil verwendet und der andere Laufwerksbuchstabe davorgehängt. Also so:
L:\Neu Bitmap.bmp
L:\Neuer Ordner\hier\Neu Bitmap.bmp
L:\Neuer Ordner (2)\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
und dann das ganze verglichen.

miniversum

PS: habs oben auch nochmal korrigiert
Bitte warten ..
Mitglied: s0335999
28.06.2007 um 07:58 Uhr
Hi,

das Problem bleibt wie folgt:

E:\roboscri\_Kopie von robocopy 070618>if NOT exist "t:\Neuer Ordner (2)\Neu Bitmap.bmp" del /Q /S "s:\Neuer Ordner (2)\
Neu Bitmap.bmp"
Datei wurde gelöscht - s:\Neuer Ordner (2)\Neu Bitmap.bmp
Datei wurde gelöscht - s:\Neuer Ordner (2)\Neuer Ordner\Neu Bitmap.bmp
Datei wurde gelöscht - s:\Neuer Ordner (2)\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
Datei wurde gelöscht - s:\Neuer Ordner (2)\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp

Das Script dazu:
01.
Quellcode 
02.
@echo off 
03.
set "SITEA=E:\Robo1" 
04.
set "BACKUP=E:\Robo1Back" 
05.
set "SITEB=\\192.168.0.240\SharedDocs\ziel" 
06.
@echo on 
07.
@echo Netzwerkverbindung herstellen .... 
08.
@echo off 
09.
 
10.
net use \\192.168.0.240\ipc$ xyz /user:xyz 
11.
 
12.
 
13.
@echo on 
14.
@echo. 
15.
@echo. 
16.
@echo --------------------- Verzeichnis als Laufwerk einbinden ------------------------- 
17.
@echo. 
18.
@echo off 
19.
:: BACKUP als Laufwerk einbinden 
20.
@echo off 
21.
for %%L in (i j k l m n o p q r s t u) do if not exist %%L:\>NUL set LWBACKUP=%%L: 
22.
 
23.
if %LWBACKUP%.==. ( 
24.
  echo. 
25.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.  
26.
  Pause 
27.
  goto:eof 
28.
29.
@echo on 
30.
 @echo Fuer den Loeschvorgang mit dem Ordner BACKUP wird temporaer das Laufwerk -- %LWBACKUP% -- genutzt! 
31.
 
32.
@echo off 
33.
 
34.
subst %LWBACKUP% %BACKUP% 
35.
 
36.
 
37.
:: SITEA als Laufwerk einbinden 
38.
@echo off 
39.
for %%L in (i j k l m n o p q r s t u) do if not exist %%L:\>NUL set LWSITEA=%%L: 
40.
 
41.
if %LWSITEA%.==. ( 
42.
  echo. 
43.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.  
44.
  Pause 
45.
  goto:eof 
46.
47.
@echo on 
48.
 @echo Fuer den Loeschvorgang der Ordner an SITEAwird temporaer das Laufwerk -- %LWSITEA% -- genutzt! 
49.
 
50.
@echo off 
51.
subst %LWSITEA% %SITEA% 
52.
 
53.
 
54.
:: SITEB als Laufwerk einbinden 
55.
@echo off 
56.
for %%L in (i j k l m n o p q r s t u) do if not exist %%L:\>NUL set LWSITEB=%%L: 
57.
 
58.
if %LWSITEB%.==. ( 
59.
  echo. 
60.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.  
61.
  Pause 
62.
  goto:eof 
63.
64.
@echo on 
65.
 @echo Fuer den Loeschvorgang der Ordner auf SITEB wird temporaer das Laufwerk -- %LWSITEB% -- genutzt! 
66.
 
67.
@echo off 
68.
subst %LWSITEB% %SITEB% 
69.
 
70.
 
71.
 
72.
 
73.
@echo on 
74.
@echo. 
75.
@echo ---------------------- Nicht mehr  an SITEA vorhandene Verzeichnisse auf SITEB loeschen --------------------- 
76.
 
77.
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%LWBACKUP%"') do if NOT exist "%LWSITEA%%%a" RD /Q /S "%LWSITEB%%%a" 
78.
 
79.
@echo. 
80.
@echo. 
81.
@echo ---------------------- Nicht mehr  an SITEA vorhandene Dateien auf SITEB loeschen --------------------- 
82.
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%%%a" del /Q /S "%LWSITEB%%%a" 
83.
 
84.
 
85.
@echo on 
86.
@echo. 
87.
@echo. 
88.
@echo ---------------------- Nicht mehr auf SITEB vorhandene Verzeichnisse an SITEA loeschen --------------------- 
89.
 
90.
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%LWBACKUP%"') do if NOT exist "%LWSITEB%%%a" RD /Q /S "%LWSITEA%%%a" 
91.
 
92.
@echo. 
93.
@echo. 
94.
@echo ---------------------- Nicht mehr auf SITEB vorhandene Dateien an SITEA loeschen --------------------- 
95.
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEB%%%a" del /Q /S "%LWSITEA%%%a" 
96.
 
97.
 
98.
 
99.
 
100.
@echo. 
101.
@echo. 
102.
@echo ------------------------ Laufwerke wieder freigeben ------------------------- 
103.
@echo off 
104.
subst %LWBACKUP% /D > NUL 
105.
subst %LWSITEA% /D > NUL 
106.
subst %LWSITEB% /D > NUL 
107.
 
108.
@echo on 
109.
@echo Netzwerkverbindung mit SITEB trennen .... 
110.
@echo off 
111.
net use \\192.168.0.240\ipc$ /del 
112.
pause 
113.
sync
cu sentinel

P.S. hast du eine Ahnung wie ich nur die Dateinamen in eine Log bekomme die gelöscht wurden. d.h. wie kann ich z.B. diese Meldung in das Log umleiten:
"Datei wurde gelöscht - s:\Neuer Ordner (2)\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp"
Bitte warten ..
Mitglied: miniversum
28.06.2007 um 09:41 Uhr
Die Umleitung kannst du mit einem angehängten >>log.txt machen (name der Log kanst du ja anpassen)
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%%%a" del /Q /S "%LWSITEB%%%a">>log.txt
Oder Du erzeugst selbst mit einem echo den Logeintrag. den könntest du dann gestalten wie du willst. das wär dann so:
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%%%a" (del /Q /S "%LWSITEB%%%a" & echo Die Datei "%LWSITEB%%%a" wurde gelöscht>>log.txt)

Das mit dem Problem das gleichnamige gelöscht werden...
Ändere mal testweise die Zeile:
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%%%a" del /Q /S "%LWSITEB%%%a"
in diese Zeilen um:
dir /s /b /a-d %LWBACKUP%>LWBACKUPAuB.txt
for /F "delims=: tokens=2" %%a in ('type LWBACKUPAuB.txt') do if NOT exist "%LWSITEA%%%a" del /Q /S "%LWSITEB%%%a"
Hier solltest du dan in der Datei LWBACKUPAuB.txt sehen können was drinsteht. udn diese Dateien (nach dem sucht er dann auf dem anderen Laufwerksbuchstaben. Wenn dus genauer willst kannst du ja auch gleich noch die anderen mit ausgeben. Den ganzen Block also so:
dir /s /b /a-d %LWBACKUP%>LWBACKUP.txt
dir /s /b /a-d %LWSITEA%>LWSITEA.txt
dir /s /b /a-d %LWSITEB%>LWSITEB.txt
for /F "delims=: tokens=2" %%a in ('type LWBACKUPAuB.txt') do if NOT exist "%LWSITEA%%%a" del /Q /S "%LWSITEB%%%a"

miniversum
Bitte warten ..
Mitglied: s0335999
28.06.2007 um 12:21 Uhr
Hi,

thx für die loggeschichte. ich hab da viel zu kompliziert gedacht.

aber zum eigentlichen Problem:

meintest Du das so oder wie?

dir /s /b /a-d %LWBACKUP%>LWBACKUPAuB.txt
dir /s /b /a-d %LWSITEA%>LWSITEA.txt
dir /s /b /a-d %LWSITEB%>LWSITEB.txt
for /F "delims=: tokens=2" %%a in ('type LWBACKUPAuB.txt') do if NOT exist "%LWSITEA%%%a" del /Q /S "%LWSITEB%%%a"

cu sentinel
Bitte warten ..
Mitglied: s0335999
28.06.2007 um 14:57 Uhr
hi,

wenn ich nerv sag bescheid ;)

beim feintuning:

ich möchte gerne ab einer bestimmten ping zahl den prozess weiterlaufen lassen.
sollte die Anzahl der pings nicht erreicht werden (= noch wacklige verbindung) dann lass nochmal die anzahl der pingsdurchlaufen. irgendwie raff ich das nicht mit dem goto neu .


01.
set "host1=192.168.0.240" & set "logdatei=logPing.txt"  
02.
 
03.
:neu 
04.
ping -n 20 %host1%<nul && goto neu 
05.
 
06.
echo Kann %host1% nicht erreichen! Schreibe Log in %logdatei% 
07.
echo ***PING_TEST*** >> %logdatei% 
08.
echo Keine Verbindung zu %host1% am %date% um %time%  >> %logdatei%

cu sentinel
Bitte warten ..
Mitglied: miniversum
28.06.2007 um 18:20 Uhr
Hi,

thx für die loggeschichte. ich hab da
viel zu kompliziert gedacht.

aber zum eigentlichen Problem:

meintest Du das so oder wie?

dir /s /b /a-d %LWBACKUP%>LWBACKUPAuB.txt
dir /s /b /a-d %LWSITEA%>LWSITEA.txt
dir /s /b /a-d %LWSITEB%>LWSITEB.txt
for /F "delims=: tokens=2" %%a in ('type LWBACKUPAuB.txt') do if NOT exist "%LWSITEA%%%a" del /Q /S "%LWSITEB%%%a"

cu sentinel

Ja genau so mein ichs. So kannst du in den Dateien dan sehen was er wirklich ausliest udn vergleicht.
Wenns danach nochncith geht kansnt du die Drei Dateien posten. Es solten alle Drei in der art aussehen das sowas drinsteht:
K:\Neu Bitmap.bmp
K:\Neuer Ordner\hier\Neu Bitmap.bmp
K:\Neuer Ordner (2)\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp

miniversum
Bitte warten ..
Mitglied: miniversum
28.06.2007 um 18:32 Uhr
hi,

wenn ich nerv sag bescheid ;)

beim feintuning:

ich möchte gerne ab einer bestimmten
ping zahl den prozess weiterlaufen lassen.
sollte die Anzahl der pings nicht erreicht
werden (= noch wacklige verbindung) dann lass
nochmal die anzahl der pingsdurchlaufen.
irgendwie raff ich das nicht mit dem goto neu
.


01.
> set "host1=192.168.0.240" & 
02.
> set "logdatei=logPing.txt"  
03.
>  
04.
> :neu 
05.
> ping -n 20 %host1%<nul && goto 
06.
> neu 
07.
>  
08.
> echo Kann %host1% nicht erreichen! Schreibe 
09.
> Log in %logdatei% 
10.
> echo ***PING_TEST*** >> %logdatei% 
11.
> echo Keine Verbindung zu %host1% am %date% 
12.
> um %time%  >> %logdatei% 
13.
> 

cu sentinel

Willst du nur eine einzige Wiederholung oder das es solange wiederholt wird bis die Verbindung gut ist? Also so wie dus machen willst würde es solange die Pings wiederholen bis die 20 Pings alle Durchkommen. Ungetestet, versuchs dann mal so:
01.
set "host1=192.168.0.240" & set "logdatei=logPing.txt"  
02.
 
03.
:neu 
04.
ping -n 20 %host1%>nul 
05.
if not %errorlevel% equ 0 (  
06.
echo Kann %host1% nicht erreichen! Schreibe Log in %logdatei% 
07.
echo ***PING_TEST*** >> %logdatei% 
08.
echo Keine Verbindung zu %host1% am %date% um %time%  >> %logdatei% 
09.
goto:neu 
10.
)
Bei einem Zweimaligen Versuch udn dann abbruch dann wärs eher so:
01.
set "host1=192.168.0.240" & set "logdatei=logPing.txt"  
02.
 
03.
ping -n 20 %host1%>nul 
04.
if not %errorlevel% ping -n 20 %host1%>nul 
05.
if not %errorlevel% equ 0 (  
06.
echo Kann %host1% nicht erreichen! Schreibe Log in %logdatei% 
07.
echo ***PING_TEST*** >> %logdatei% 
08.
echo Keine Verbindung zu %host1% am %date% um %time%  >> %logdatei% 
09.
goto:Abbruch 
10.
)
miniversum
Bitte warten ..
Mitglied: s0335999
29.06.2007 um 12:28 Uhr
hi,

wiedermal ein dickes thx.

aber ;)

so richtig läuft das noch nicht:

da der errorlevel auch 0 ist, wenn am Anfang zB. 5 pings laufen und die restlichen 10 dann wieder nicht. Aber es ist mir gerade wichtig das wirklich alle 20 Pings gelaufen sind.

wenn dann alle 20 Pings oder auch mehr (wird sich zeigen was dann tatsächlich sinnvoll ist) gelaufen sind, kann die sync bzw. vorher löschen losgehen.

cu sentinel
Bitte warten ..
Mitglied: s0335999
29.06.2007 um 13:24 Uhr
Hi,

hab das so eingebaut wie beschrieben. leider werden immer noch alle gleichnamigen dateien in den unterordnern gelöscht.
Das wurde in die Dateien geschrieben:

LWBACKUPAuB.txt:
01.
U:\Neu Bitmap.bmp 
02.
U:\Neuer Ordner\Neu Bitmap.bmp 
03.
U:\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp 
04.
U:\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
LWSITEA.txt
01.
T:\Neuer Ordner\Neu Bitmap.bmp 
02.
T:\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp 
03.
T:\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
LWSITEB.txt
01.
S:\Neu Bitmap.bmp 
02.
S:\Neuer Ordner\Neu Bitmap.bmp 
03.
S:\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp 
04.
S:\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
cu sentinel
Bitte warten ..
Mitglied: s0335999
29.06.2007 um 13:34 Uhr
Hi,

funktioniert wunderbar.

aber


kein aber ;)

Ich versteh nur das nicht.

^|find "Verloren"'

In den Fehlermeldungen existiert ja kein Verloren oder wie ist das gemeint?

cu sentinel
Bitte warten ..
Mitglied: miniversum
29.06.2007 um 13:36 Uhr
Hmm merkwürdig.
MAch mal aus der Ursprünglichen Zeile
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%%%a" del /Q /S "%LWSITEB%%%a"
diese:
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do (
echo [%%a][%%~pnxa][%LWSITEA%%%~pnxa][%LWSITEB%%%~pnxa]>>debuglog.txt
if NOT exist "%LWSITEA%%%~pnxa" (del /Q /S "%LWSITEB%%%~pnxa" && echo geloescht>>debuglog.txt) else (echo nicht geloescht>>debuglog.txt)
)
und poste bitte mal was dann in der Datei debuglog.txt steht
miniversum
Bitte warten ..
Mitglied: miniversum
29.06.2007 um 13:46 Uhr
ok dann versuchs so:
set "host1=192.168.0.240" & set "logdatei=logPing.txt"

:neu
FOR /F "tokens=10 delims= " %%i in ('ping -n 20 %host1%^|find "Verloren"') do set errorlevel=%%i
if not %errorlevel% equ 0 (
echo Kann %host1% nicht erreichen! Schreibe Log in %logdatei%
echo *PING_TEST* >> %logdatei%
echo Keine Verbindung zu %host1% am %date% um %time% >> %logdatei%
goto:neu
)
hier hat dan errorlevel die Anzahl der Verlorenen Packete. ist also Errorlevel=0 ging auch nichts verloren.

miniversum
Bitte warten ..
Mitglied: miniversum
29.06.2007 um 17:50 Uhr
In der Fehlermeldung nicht. bzw. da gibts ja nicht direkt ne Fehlermeldung.
Beim Ping steht am ende ja immer eine Zeile inder steht wwieviele der Packete Empfangen und wieviele Verloren wurden. Diese Zeile sucht ich mit dem Find. Die For-Schleife zerlegt diese Zeile dann und schreibt den Wert der bei "Verloren" in die Variable errorlevel. Daher steht dort im errorlevel auch 0 wenn alles gut ging und wenn nicht die Anzahl der Verlorenen Packete.

miniversum
Bitte warten ..
Mitglied: s0335999
03.07.2007 um 11:29 Uhr
hi,

is schon merkwürdig aber wahr:


debuglog.txt
01.
[\Neu Bitmap.bmp][\Neu Bitmap.bmp][t:\Neu Bitmap.bmp][s:\Neu Bitmap.bmp]  
02.
geloescht 
03.
[\Neuer Ordner\Neu Bitmap.bmp][\Neuer Ordner\Neu Bitmap.bmp][t:\Neuer Ordner\Neu Bitmap.bmp][s:\Neuer Ordner\Neu Bitmap.bmp]  
04.
nicht geloescht 
05.
[\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp][\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp][t:\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp][s:\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp]  
06.
nicht geloescht 
07.
[\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp][\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp][t:\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp][s:\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp]  
08.
nicht geloescht
cu sentinel
Bitte warten ..
Mitglied: miniversum
03.07.2007 um 16:57 Uhr
Also jetzt kapier ichs echt nicht. Im debuglog.txt steht ja nur bei der ersten datei (\Neu Bitmap.bmp) gelöscht. bei den restlichen allen nicht gelöscht. Aber er hat trotzdem was anderes gemacht?

mach mal aus den Jetzigen Zeilen:
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do (
echo [%%a][%%~pnxa][%LWSITEA%%%~pnxa][%LWSITEB%%%~pnxa]>>debuglog.txt
if NOT exist "%LWSITEA%%%~pnxa" (del /Q /S "%LWSITEB%%%~pnxa" && echo geloescht>>debuglog.txt) else (echo nicht geloescht>>debuglog.txt)
)
folgende:
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do (
if NOT exist "%LWSITEA%%%a" (del /Q /S "%LWSITEB%%%a">>debuglog.txt) else (echo %LWSITEB%%%a" nicht geloescht>>debuglog.txt)
)
und poste mal bitte die debuglog.txt
miniversum
Bitte warten ..
Mitglied: miniversum
04.07.2007 um 12:28 Uhr
ups
ich merk grade...
Der Fehler liegt wo anders. Hab ich die ganze Zeit übersehen.
Ändere mal in deiner Ursprünglichen Zeile:
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%%%a" del /Q /S "%LWSITEB%%%a"
die Parameter nach dem del. Lass sie ganz weg. also so:
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEA%%%a" del "%LWSITEB%%%a"

miniversum
Bitte warten ..
Mitglied: s0335999
04.07.2007 um 14:23 Uhr
hi,

super so geht das.

hat das /q denn hier keine funktion und wäre es nicht besser ich mach da noch das /f für die schreibgeschützten dateien rein?


cu sentinel
Bitte warten ..
Mitglied: miniversum
04.07.2007 um 19:13 Uhr
Das /Q brauchst Du hier nicht weil ja jede Datei explizit angegeben und gelöscht wird.
Das /F kannst du reinmachen wenn du erwartest das auch schreibgeschützte Dateien dabei sind.

miniversum
Bitte warten ..
Mitglied: s0335999
05.07.2007 um 10:20 Uhr
Hi,

thx

wiedermal beim Feintuning ;).

Unterstützt cmd auch globale Variablen? Ich möchte eine zentrale Konfigurationsdatei haben für alle Parameter in allen .cmd's und das möglichst ohne eine .txt zu nutzen.


cu sentinel
Bitte warten ..
Mitglied: miniversum
05.07.2007 um 15:46 Uhr
Klar. Tip mal an der cmd "set" ein dann siehst du ne menge globaler Systemvariabeln.

miniversum
Bitte warten ..
Mitglied: s0335999
05.07.2007 um 16:27 Uhr
Hi,

da hast Du natürlich recht, aber ich kann aus bestimmten Gründen nicht in der registry rumhünern und manuell setzen ist zu aufwendig.

Ich bräuchte etwas unabhängiges, so wie in c oder so.

Ansonsten lös ich es über eine zusätzliche Datei.

cu sentinel
Bitte warten ..
Mitglied: miniversum
05.07.2007 um 19:24 Uhr
Also ich würde mit einer Zentralen Datei dan arbeiten die du in dienen Batsches ausliest.

miniversum
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
14 Tage alte Dateien automatisch löschen - Shell (1)

Frage von traller zum Thema Batch & Shell ...

Windows Server
gelöst Administrator kann auf Server keine EXE-Dateien kopieren, löschen, anlegen (5)

Frage von Winfried-HH zum Thema Windows Server ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Entwicklung
Versteckte .(Punkt)Dateien löschen (3)

Frage von DarkJM zum Thema Entwicklung ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...