monk71
Goto Top

Wie kann ich via Batch zwei Dateien vergleichen und ZIPen

Hallo,
Ich bin neu hier und hoffe einer kann mir helfen da ich den Wald vor lauter Bäumen nicht mehr sehe.

Ich versuche einen Batch zu schreiben, welcher mir Dateien auf verschiedenen Servern an Hand des Präfixes vergleicht.
Wenn der Präfix gleich ist, soll diese Datei von Server A nach Server B verschoben werden.
Danach sollen diese beiden Dateien in ein neu erstelltes Verzeichnis verschoben/kopiert werden. Das neue Verzeichnis hat den Selben Namen wie der Präfix der beiden Dateien.
Nun möchte ich noch, das der Batch durch jedes neue Verzeichnis geht und die beiden enthaltenen Dateien zusammen mit 7ZIP komprimiert und diese ZIP Datei dann in einen bestimmten Ordner zur Archivierung ablegt.

Folgenden Code habe ich schon.
 
@echo off & setlocal 
set "source=C:\TEMP\Neuer Ordner"   
set "dest=D:\PLAN"   
set "ext=dhp"  
set "ext2=txt"   

for %%f in ("%dest%\*.txt") do (  
    if exist "%source%\%%~nf.dhp" move "%source%\%%~nf.dhp" "%dest%\"  
	
	if not exist D:\"%%~nf" md D:\PLAN\"%%~nf"  
	if exist "%dest%\%%~nf.dhp" copy "%dest%\%%~nf.txt" D:\PLAN\"%%~nf"  
	if exist "%dest%\%%~nf.dhp" copy "%dest%\%%~nf.dhp" D:\PLAN\"%%~nf"  
	
)

For /F "Delims=" %%f in ('Dir /B/A-D "%dest%\*.*"') Do call :ZipIt "%%~fA"   

:ZipIt 
Set "Zip=ARCHIV%~n1.zip"   
echo ZIP = %ZIP%
Set "Zip2=%~n1"   
"C:\Programme\7-Zip\7z.exe" u "D:\PLAN\ZIPFILES_to_ARCHIVE\%ZIP%" "%dest%\%Zip2%.*"   



Bis jetzt schaffe ich es die Dateien zu vergleichen,ein neues Verzeichnis zu erstellen und die Dateien in das neue Verzeichnis zu kopieren.
Wenn ich versuche die Dateien zu verschieben, läuft das Script nicht ganz durch, wenn es mehr als zwei Dateien sind.
Außerdem finde ich nicht den Trick, wie ich dem Script sage, das es durch die neu und nur durch die neuen Verzeichnisse laufen soll und die Dateien darin packen soll.
Bis jetzt nimmt 7ZIP nur die original Dateien,da sie ja nicht verschoben sind. Sie müssen aber Verschoben werden, damit ich so die kontrolle habe das keine Datei doppelt überprüft wird. Es kommen ja jeden Tag neue Dateien auf beiden Servern hinzu.

Ich hoffe mir kann jemand von euch helfen.

Gruß
Monk

Content-Key: 143487

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

Printed on: April 19, 2024 at 18:04 o'clock

Mitglied: 77559
77559 May 25, 2010 at 13:23:23 (UTC)
Goto Top
Hallo Monk,

willkommen im Forum,

auf den ersten Blick fällt mir auf das vor dem Label :Zipit eine Zeile mit Goto :Eof fehlt.

Bitte formatiere deinen Code zur besseren Les-/Referenzier-barkeit unbedingt mit den dafür vorgesehenen in der Formatierungshilfe

Ansonsten durchschaue ich deine Struktur noch nicht so ganz.

Gruß
LotPings
Member: monk71
monk71 May 25, 2010 at 13:34:34 (UTC)
Goto Top
Hallo LotPings

ich habe den Code mal formatiert. face-smile
wozu brauche ich den ein Eof??
Mitglied: 77559
77559 May 25, 2010 at 14:03:30 (UTC)
Goto Top
Zitat von @monk71:
ich habe den Code mal formatiert. face-smile
Sieht schön bunt aus, aber die PHP Syntax passt nicht so ganz zu den Batch Elementen, type=PFP und die <? ?> wieder rausnehmen face-wink

wozu brauche ich den ein Eof??
Weil der Hauptbatch nach der For Schleife sonst mit "leerem" {%1} in die Subroutine Zipit hineinläuft.

Folgendes ist mir aufgefallen:
  • In D:\Plan liegen .Txt deren Namen du mit der Ext dhp in %Source% probierst und falls vorhanden nach %Dest% verschiebst.
  • Wenn es diesen Namen nicht als Ordner im Root von D: gibt legst du ihn unterhalb von D:\Plan an.

  • Der if in Zeile 12 ist witzlos, das ist deine Ausgangsbedingung.
  • In 17 beziehst du dich beim Dir auf %%~nf das zu diesem Zeitpunkt ausserhalb der ersten Schleife nicht existiert.

Vielleicht passt diese vereinfachte Version:

@echo off & setlocal
set "source=C:\TEMP\Neuer Ordner"  
set "dest=D:\PLAN"  
set "ext=dhp"  
set "ext2=txt"  
set 7z="%ProgramFiles%\7-Zip\7z.exe"  
set "Arc=D:\PLAN\ZIPFILES_to_ARCHIVE\ARCHIV"  

for %%f in ("%dest%\*.txt") do if exist "%source%\%%~nf.dhp" (  
  move "%source%\%%~nf.dhp" "%dest%\"  
  if not exist D:\"%%~nf" md D:\PLAN\"%%~nf"  
  copy "%dest%\%%~nf.txt" D:\PLAN\"%%~nf\"  
  copy "%dest%\%%~nf.dhp" D:\PLAN\"%%~nf\"  
  %7z% u "%ARC%%~nf.zip" "%dest%\%%~nf.*"  
)

Gruß
LotPings

Edit: der call ist versehentlich stehemgeblieben, entfernt.