s0335999
Goto Top

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

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)

Content-Key: 61237

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

Printed on: April 25, 2024 at 23:04 o'clock

Mitglied: 13100
13100 Jun 15, 2007 at 14:01:32 (UTC)
Goto Top
wenn robocopy gelöschte dateien nich syncronisiert, warum muss man sie dann vorher löschen.
Member: miniversum
miniversum Jun 15, 2007 at 14:27:51 (UTC)
Goto Top
Versuchs mal so:
set "quelle=d:\quelle"  
set "ziel=d:\ziel"  
REM Für Verzeichnisse
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%ziel%"') do if NOT exist "%quelle%\%%a"\NUL RD /Q /S "%ziel%%%a"  
REM Für Dateien
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
Member: s0335999
s0335999 Jun 16, 2007 at 13:30:26 (UTC)
Goto Top
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
Mitglied: 13100
13100 Jun 16, 2007 at 17:01:02 (UTC)
Goto Top
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.
Member: s0335999
s0335999 Jun 17, 2007 at 07:47:00 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 17, 2007 at 07:53:40 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 17, 2007 at 08:00:32 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 17, 2007 at 11:23:11 (UTC)
Goto Top
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:
set "quelle=d:\quelle"  
set "ziel=d:\ziel"  

REM Kopieren
xcopy "%quelle%" "%ziel%" /c /s /e /r /v /d /y /i /h /f /o /x  

REM Nicht existierende Verzeichnisse löschen
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%ziel%"') do if NOT exist "%quelle%\%%a"\NUL RD /Q /S "%ziel%%%a"  

REM Nicht existierende Dateien löschen
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
Member: s0335999
s0335999 Jun 18, 2007 at 07:02:57 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 18, 2007 at 07:51:48 (UTC)
Goto Top
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.

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%%%a"  
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%%%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.

REM Nicht existierende Verzeichnisse löschen
for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%BackupSeiteB%"') do if NOT exist "%SyncOrdnerSeiteB%\%%a"\NUL RD /Q /S "%SyncOrdnerSeiteA%%%a"  
REM Nicht existierende Dateien löschen
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
Member: s0335999
s0335999 Jun 18, 2007 at 11:53:07 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 18, 2007 at 13:42:09 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 18, 2007 at 14:06:14 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 18, 2007 at 14:56:21 (UTC)
Goto Top
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):
@echo off
set src=F:\quelle
set dst=F:\ziel
set log="F:\SyncLog %date%.txt"  

echo Log vom: %Date% %Time% >> %log%
echo Dateien werden kopiert: >> %log%

if %src:~-1%==\ set src=%src:~0,-1%
xcopy "%src%" "%dst%" /c /s /e /r /v /d /y /i /h /f /o /x >> %log%  

echo Dateien werden geloescht: >> %log%

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:
Subst %LWdst% "%dst%"  
for /R %LWdst%\ %%i in ("*.*") do @FC "%%i" "%src%%%~pnxi" >nul || del /s /q "%%i" && echo %%i>>%log%  
Subst %LWdst% /D

miniversum
Member: s0335999
s0335999 Jun 18, 2007 at 15:03:33 (UTC)
Goto Top
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.
Member: miniversum
miniversum Jun 18, 2007 at 15:38:06 (UTC)
Goto Top
wie sieht den deine Batch aus?
ich weiß grade garnich was du bei dir verändert hast...

miniversum
Member: s0335999
s0335999 Jun 25, 2007 at 10:59:07 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 25, 2007 at 11:07:35 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 25, 2007 at 12:47:42 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 25, 2007 at 13:30:19 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 26, 2007 at 08:33:29 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 26, 2007 at 13:59:22 (UTC)
Goto Top
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:
:: SITEA als Laufwerke einbinden
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:
if %LWSITEA%.==. (
  echo.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
  Pause
  goto:eof
)
if (%SITEA:~2,1%)==(:) subst %LWSITEA% %SITEA% > NUL
if (%SITEA:~2,1%)==(\) net use %LWSITEA% %SITEA% > NUL

:: BACKUP als Laufwerke einbinden
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:
if %LWBACKUP%.==. (
  echo.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
  Pause
  goto:eof
)
if (%BACKUP:~2,1%)==(:) subst %LWBACKUP% %BACKUP% > NUL
if (%BACKUP:~2,1%)==(\) net use %LWBACKUP% %BACKUP% > NUL

:: SITEB als Laufwerke einbinden
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:
if %LWSITEB%.==. (
  echo.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
  Pause
  goto:eof
)
if (%SITEB:~2,1%)==(:) subst %LWSITEB% %SITEB% > NUL
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:
@echo off
set "SITEA=E:\Robo1"  
set "BACKUP=E:\Robo1Back"  
set "SITEB=E:\Robo2"  

:: ---------------------Verzeichnisse aus Laufwerke einbinden -----------------------------------
:: SITEA als Laufwerke einbinden
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:
if %LWSITEA%.==. (
  echo.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
  Pause
  goto:eof
)
if (%SITEA:~2,1%)==(:) subst %LWSITEA% %SITEA% > NUL
if (%SITEA:~2,1%)==(\) net use %LWSITEA% %SITEA% > NUL

:: BACKUP als Laufwerke einbinden
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:
if %LWBACKUP%.==. (
  echo.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
  Pause
  goto:eof
)
if (%BACKUP:~2,1%)==(:) subst %LWBACKUP% %BACKUP% > NUL
if (%BACKUP:~2,1%)==(\) net use %LWBACKUP% %BACKUP% > NUL

:: SITEB als Laufwerke einbinden
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:
if %LWSITEB%.==. (
  echo.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
  Pause
  goto:eof
)
if (%SITEB:~2,1%)==(:) subst %LWSITEB% %SITEB% > NUL
if (%SITEB:~2,1%)==(\) net use %LWSITEB% %SITEB% > NUL

:: ----------------------- Verzeichnisse und Dateien loeschen ------------------------
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"  

:: ------------------------------ Laufwerke Freigeben ------------------------------------
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

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.
Member: s0335999
s0335999 Jun 26, 2007 at 14:22:22 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 26, 2007 at 16:12:28 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 27, 2007 at 08:50:00 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 27, 2007 at 13:02:16 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 27, 2007 at 13:28:54 (UTC)
Goto Top
Dann ists ja gut wenns so geht.
Also alle größeren Probleme erledigt.
Member: s0335999
s0335999 Jun 27, 2007 at 13:37:32 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 27, 2007 at 13:52:20 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 28, 2007 at 05:58:04 (UTC)
Goto Top
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:
Quellcode
@echo off
set "SITEA=E:\Robo1"  
set "BACKUP=E:\Robo1Back"  
set "SITEB=\\192.168.0.240\SharedDocs\ziel"  
@echo on
@echo Netzwerkverbindung herstellen ....
@echo off

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


@echo on
@echo.
@echo.
@echo --------------------- Verzeichnis als Laufwerk einbinden -------------------------
@echo.
@echo off
:: BACKUP als Laufwerk einbinden
@echo off
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:

if %LWBACKUP%.==. (
  echo.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
  Pause
  goto:eof
)
@echo on
 @echo Fuer den Loeschvorgang mit dem Ordner BACKUP wird temporaer das Laufwerk -- %LWBACKUP% -- genutzt!

@echo off

subst %LWBACKUP% %BACKUP%


:: SITEA als Laufwerk einbinden
@echo off
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:

if %LWSITEA%.==. (
  echo.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
  Pause
  goto:eof
)
@echo on
 @echo Fuer den Loeschvorgang der Ordner an SITEAwird temporaer das Laufwerk -- %LWSITEA% -- genutzt!

@echo off
subst %LWSITEA% %SITEA%


:: SITEB als Laufwerk einbinden
@echo off
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:

if %LWSITEB%.==. (
  echo.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
  Pause
  goto:eof
)
@echo on
 @echo Fuer den Loeschvorgang der Ordner auf SITEB wird temporaer das Laufwerk -- %LWSITEB% -- genutzt!

@echo off
subst %LWSITEB% %SITEB%




@echo on
@echo.
@echo ---------------------- Nicht mehr  an SITEA vorhandene Verzeichnisse auf SITEB loeschen ---------------------

for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%LWBACKUP%"') do if NOT exist "%LWSITEA%%%a" RD /Q /S "%LWSITEB%%%a"  

@echo.
@echo.
@echo ---------------------- Nicht mehr  an SITEA vorhandene Dateien auf SITEB loeschen ---------------------
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 on
@echo.
@echo.
@echo ---------------------- Nicht mehr auf SITEB vorhandene Verzeichnisse an SITEA loeschen ---------------------

for /F "delims=: tokens=2" %%a in ('dir /s /b /ad "%LWBACKUP%"') do if NOT exist "%LWSITEB%%%a" RD /Q /S "%LWSITEA%%%a"  

@echo.
@echo.
@echo ---------------------- Nicht mehr auf SITEB vorhandene Dateien an SITEA loeschen ---------------------
for /F "delims=: tokens=2" %%a in ('dir /s /b /a-d %LWBACKUP%') do if NOT exist "%LWSITEB%%%a" del /Q /S "%LWSITEA%%%a"  




@echo.
@echo.
@echo ------------------------ Laufwerke wieder freigeben -------------------------
@echo off
subst %LWBACKUP% /D > NUL
subst %LWSITEA% /D > NUL
subst %LWSITEB% /D > NUL

@echo on
@echo Netzwerkverbindung mit SITEB trennen ....
@echo off
net use \\192.168.0.240\ipc$ /del
pause
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"
Member: miniversum
miniversum Jun 28, 2007 at 07:41:21 (UTC)
Goto Top
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 face-smile 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
Member: s0335999
s0335999 Jun 28, 2007 at 10:21:05 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 28, 2007 at 12:57:29 (UTC)
Goto Top
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 .


set "host1=192.168.0.240" & set "logdatei=logPing.txt"   

:neu
ping -n 20 %host1%<nul && goto neu

echo Kann %host1% nicht erreichen! Schreibe Log in %logdatei%
echo ***PING_TEST*** >> %logdatei%
echo Keine Verbindung zu %host1% am %date% um %time%  >> %logdatei%


cu sentinel
Member: miniversum
miniversum Jun 28, 2007 at 16:20:03 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 28, 2007 at 16:32:47 (UTC)
Goto Top
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
.


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


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:
set "host1=192.168.0.240" & set "logdatei=logPing.txt"   

:neu
ping -n 20 %host1%>nul
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
)
Bei einem Zweimaligen Versuch udn dann abbruch dann wärs eher so:
set "host1=192.168.0.240" & set "logdatei=logPing.txt"   

ping -n 20 %host1%>nul
if not %errorlevel% ping -n 20 %host1%>nul
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:Abbruch
)

miniversum
Member: s0335999
s0335999 Jun 29, 2007 at 10:28:55 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jun 29, 2007 at 11:24:11 (UTC)
Goto Top
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:
U:\Neu Bitmap.bmp
U:\Neuer Ordner\Neu Bitmap.bmp
U:\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
U:\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
LWSITEA.txt
T:\Neuer Ordner\Neu Bitmap.bmp
T:\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
T:\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
LWSITEB.txt
S:\Neu Bitmap.bmp
S:\Neuer Ordner\Neu Bitmap.bmp
S:\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp
S:\Neuer Ordner\Neuer Ordner\Neuer Ordner\Neu Bitmap.bmp

cu sentinel
Member: s0335999
s0335999 Jun 29, 2007 at 11:34:02 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 29, 2007 at 11:36:04 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 29, 2007 at 11:46:56 (UTC)
Goto Top
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
Member: miniversum
miniversum Jun 29, 2007 at 15:50:23 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jul 03, 2007 at 09:29:44 (UTC)
Goto Top
hi,

is schon merkwürdig aber wahr:


debuglog.txt
[\Neu Bitmap.bmp][\Neu Bitmap.bmp][t:\Neu Bitmap.bmp][s:\Neu Bitmap.bmp] 
geloescht
[\Neuer Ordner\Neu Bitmap.bmp][\Neuer Ordner\Neu Bitmap.bmp][t:\Neuer Ordner\Neu Bitmap.bmp][s:\Neuer Ordner\Neu Bitmap.bmp] 
nicht geloescht
[\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] 
nicht geloescht
[\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] 
nicht geloescht

cu sentinel
Member: miniversum
miniversum Jul 03, 2007 at 14:57:24 (UTC)
Goto Top
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
Member: miniversum
miniversum Jul 04, 2007 at 10:28:57 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jul 04, 2007 at 12:23:57 (UTC)
Goto Top
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
Member: miniversum
miniversum Jul 04, 2007 at 17:13:27 (UTC)
Goto Top
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
Member: s0335999
s0335999 Jul 05, 2007 at 08:20:53 (UTC)
Goto Top
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
Member: miniversum
miniversum Jul 05, 2007 at 13:46:41 (UTC)
Goto Top
Klar. Tip mal an der cmd "set" ein dann siehst du ne menge globaler Systemvariabeln.

miniversum
Member: s0335999
s0335999 Jul 05, 2007 at 14:27:32 (UTC)
Goto Top
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
Member: miniversum
miniversum Jul 05, 2007 at 17:24:57 (UTC)
Goto Top
Also ich würde mit einer Zentralen Datei dan arbeiten die du in dienen Batsches ausliest.

miniversum