megadingz
Goto Top

Batch - Dateien kopieren und prüfen

Hallo,

ich hab ein Script was schaut ob Dateien in einem Ordner sind. Wenn ja soll es diese in einen anderen Ordner kopieren.

Script

set foldername=eins
set count=0
for %%i in (%foldername%\*) do set /a count+=1
if "%count%"=="0" GOTO :ENDE
xcopy %foldername%\*.* Server\%foldername% /S /E /C /R /V


Das funktioniert.
Jetzt möchte ich die kopierten Dateien überprüfen. Also sichergehen das die Datei kopiert worden ist. Dazu müsste ich die Dateinamen in der "for" Schleife in Variablen speichern und dann mit "If exists" prüfen.

Ich weiß nicht wie ich in der Schleife jetzt eine Variable hochzähle. Ich denke da an sowas wie ein Array, aber das gibt es ja bei Batch nicht. (oder?)
Irgendwie weis ich nicht weiter, über eine Hilfestellung würde ich mich freuen.


Grüße
Michael

Content-Key: 202412

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

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

Member: bastla
bastla Feb 26, 2013 at 17:11:30 (UTC)
Goto Top
Hallo Megadingz und willkommen im Forum!

Eine Frage vorweg: Du verwendest für das Kopieren die Option "/E" (und überflüssiger Weise auch "/S") - ist daraus zu schließen, dass es nicht nur um den angegebenen Ordner ("eins") geht, sondern auch Unterordner zu berücksichtigen sind?

Außerdem: Genügt eine einfache Existenzprüfung im Zielordner? Ich würde im Fall des Falles eher eine Prüfsumme (zB MD5) verwenden, um sicher zu stellen, dass die kopierten Dateien tatsächlich identisch mit den Quelldateien sind ...

Grüße
bastla
Member: Megadingz
Megadingz Feb 26, 2013 at 18:35:54 (UTC)
Goto Top
Hallo Bastla,

die Optionen /E und natürlich auch /S kann man weglassen.
Da hab ich nicht aufgepasst. Es reicht wenn nur die Dateien kopiert werden.
Der Ordner auf dem Server hat den gleichen Namen wie auf der lokalen Festplatte. Es soll geschaut werden ob Dateien enthalten sind und wenn ja sollen diese auf den Server kopiert und anschließend gelöscht werden.

Eine Prüfsumme wäre gut aber nicht zwingend notwendig,es handelt sich nur um TV-Aufnahmen. Wenn da mal eine nicht richtig kopiert wird ist das nicht ganz so schlimm.

Wenn ich die Dateinamen nur irgendwie in Variablen bekommen würde um sie dann zu prüfen,das wär schon ok.


Grüße
Michael
Member: bastla
bastla Feb 26, 2013 updated at 19:59:20 (UTC)
Goto Top
Hallo Megadingz!
die Optionen /E und natürlich auch /S kann man weglassen.
Wenn auch der Zielordner bereits existiert, brauchst Du noch nicht mal "xcopy" (kannst es aber natürlich trotzdem verwenden) ...

Könnte dann (ungetestet) etwa so gehen:
@echo off & setlocal
set "foldername=eins"  
set "target=\\Server\%foldername%"  

dir /w /a-d "%foldername%" >nul 2>nul && (  
    copy "%foldername%" "%target%\" >nul  
    for /f "delims=" %%i in ('dir /b/a-d "%foldername%"') do if exist "%target%\%%~nxi" echo del "%%i"  
)
pause
Das Löschen der kopierten Dateien ist (durch das "echo" vor dem "del") noch deaktiviert bzw wird durch Anzeigen des Löschbefehls simuliert - wenn Du das "echo" entfernst, wird auch gelöscht.

Achtung - ev vorhandene gleichnamige Dateien im Zielordner werden beim Kopieren kommentarlos überschrieben!

Dateien aus dem Quellordner, die nach dem Kopieren im Zielordner nicht gefunden wurden, bleiben einfach in der Quelle erhalten.

Grüße
bastla
Member: Megadingz
Megadingz Feb 27, 2013 at 13:07:05 (UTC)
Goto Top
Hallo Bastla,

ja super. Vielen Dank. Das hat funktioniert. Es fehlte nur vor dem "del" nochmals %foldername%.

Ich muss mal ein paar Tutorials zum dem Thema lesen. Ich kapiere nicht alles von dem was du da gemacht hast.


Grüße

Megadingz