Batch Dateien per Batch von A nach B kopieren anhand einer Liste

Registriert
Apr. 2018
Beiträge
6
Hallo Gemeinde !

Ich komme nicht mehr weiter.

Ich habe Dateien im Ordner A

In einer Liste (txt o.ä.) stehen bestimmte Dateinamen

Diese sollen von Ordner A nach B kopiert werden


In einer weiteren Batchdatei sollen Dateien die in dieser Liste stehen aus Ordner B gelöscht werden.

Wer kann mir hier helfen ?

danke schon mal im voraus
 
Ich habe es so gelöst, dass ich die Batch Datei in Ordner A gelegt habe und dann wurden die Sachen nach Ordner B kopiert.
Ich kann aber erst heute Nachmittag gucken wie der Batch aussieht.
 
Warum sollen die Dateien erst nach B kopiert werden & dann im nächsten Schritt dann von B wieder gelöscht werden?
Hier der Weg um die Dateien von A nach B zu bekommen:

In der Datei liste.txt stehen die Dateien mit Pfaden drinnen (beispielhaft : C:\A\1.txt):
Code:
@echo off
FOR /f "delims=" %%i IN ('FINDSTR . "liste.txt"') DO (
move %%i C:\B
)

Falls doch dieser komische Vorgang erwünscht (auf die Schnelle):
nur den Dateinamen in der liste.txt hinterlegen (beispielhaft : 1.txt)

=> Daten von A nach B kopieren:
Code:
@echo off
FOR /f "delims=" %%i IN ('FINDSTR . "liste.txt"') DO (
copy /Y C:\A\%%i C:\B
)

=> Daten aus B löschen
Code:
@echo off
FOR /f "delims=" %%i IN ('FINDSTR . "liste.txt"') DO (
del /Q C:\B\%%i
)
 
Zuletzt bearbeitet:
Muss es manuell Batch sein oder geht es in erster Linie darum, die txt-Datei zu verwenden? Viele Datenabgleichprogramme könnte man mit dem Text per include/exclude füttern. Hier z.B. beim zweiten, dritten Bild: http://robomirror.sourceforge.net/
 
ryan_blackdrago schrieb:
Warum sollen die Dateien erst nach B kopiert werden & dann im nächsten Schritt dann von B wieder gelöscht werden?
Hier der Weg um die Dateien von A nach B zu bekommen:

In der Datei liste.txt stehen die Dateien mit Pfaden drinnen (beispielhaft : C:\A\1.txt):
Code:
@echo off
FOR /f "delims=" %%i IN ('FINDSTR . "liste.txt"') DO (
move %%i C:\B
)

Falls doch dieser komische Vorgang erwünscht (auf die Schnelle):
nur den Dateinamen in der liste.txt hinterlegen (beispielhaft : 1.txt)

=> Daten von A nach B kopieren:
Code:
@echo off
FOR /f "delims=" %%i IN ('FINDSTR . "liste.txt"') DO (
copy /Y C:\A\%%i C:\B
)

=> Daten aus B löschen
Code:
@echo off
FOR /f "delims=" %%i IN ('FINDSTR . "liste.txt"') DO (
del /Q C:\B\%%i
)

======================
Erklärung:
Es liegen rund 500000 TIFs in unserem Ordner Archiv (hier A genannt).
Aus unserem ERP System kann ich eine Liste exportieren in der die aktiven Aufräge und somit die aktiven TIFs steht.
Diese ca. 10000 TIFs soll in den Ordner B ( Produktiv ) kopiert werden.
Dadurch kann ein Kamerasystem schneller arbeiten, weil es eben nur 10000 Dateien sichten muss und nicht alle.
Wenn der Auftrag abgeschlossen ist, möchte ich eine neue Liste mit den fertigen exportieren und hierdurch die TIFs wieder aus Produktiv löschen.

Sorry - ich wollte es am Anfang einfach halten
Ergänzung ()

leider funktioniert es nicht
 
zum Tread von ryan_blackdrago

Sorry -ich hasse es auch wenn jemand sagt geht nicht und es nicht erklärt.

Also im Ordner C:\A befinden sich jetzt testweise 10 TIFs
eins heißt DOK_11359-3302a

Die Datei liste.txt liegt auf C:\
Die Batchdatei start.bat liegt ebenfalls auf C:\

Ich habe die Datei liste.txt mehrfach modifiziert
mal DOK_11359-3302a
mal DOK_11359-3302a.tif
mal C:\A\DOK_11359-3302a
mal C:\A\DOK_11359-3302a.tif

bei keiner Variante wurde die gewünschte Datei in C:\B kopiert
Ergänzung ()

zum Tread von Wilhelm14

Danke diese Seite habe ich auch schon gefunden,
komme aber damit überhaupt nicht klar.
Prinzipiell wäre diese Lösung auch möglich, da der Export aus dem ERP tatsächlich in ein Exceldatei kommt.
Diese habe ich per Makro angepasst, dass am Ende die TXT gespeichert wird.

Wenn das VBA einmal funktioniert und in jeder exportierten Exceldatei aufgerufen werden kann wäre es super.
 
Zuletzt bearbeitet:
Nachtfalke-2000 schrieb:
Prinzipiell wäre diese Lösung auch möglich, da der Export aus dem ERP tatsächlich in ein Exceldatei kommt.
Diese habe ich per Makro angepasst, dass am Ende die TXT gespeichert wird.
Ich bin Excel-unwissend, aber warum am Ende eine txt speichern? Wenn ich das richtig verstehe, benötigt man in Excel eine Spalte mit den Wunschdateien. Und auf diese lässt man innerhalb Excels das VBA-Skript los. Man nutzt praktisch Excel zur "Synchronisation, Datenabgleich". txt sollte dort ganz wegfallen.
 
perfekt
und vielen dank so klappt es.
jetzt habe ich zumindes mal eine Lösung.

Wenn du dich mit der VBA Variante auskennst, wäre es uper, wenn du mir hier auch helfen könntest.
Ich befürchte, dass die Damen in der AV, die das Ganze machen müssen, mit den Batches nicht klarkommen, weil die exportierten Dateien eine Nummer haben müssen und nicht liste.txt heißen dürfen.

Oder könnte man in die Batches eine Art Abfrage wie Input... "Geben Sie bitte die Nummer ein" ansatt fest liste.txt einbauen ?
 
Sry, ich bin wirklich Excel-unwissend. Was zu euren Bedürfnissen passt, müsst ihr entscheiden und erarbeiten. Ich wollte nur grob eine Richtung als Tipp abgeben. Selbst wenn ich es könnte, würde ich ungerne per Forum Anleitungen verbreiten, die in euren Produktivbetrieb eingebaut werden. Nachher geht was schief und dann war es "der da im Forum". ;)
Es wird doch Leute bei euch geben, die den ganzen Tag vor Excel sitzen, seit Jahren.
 
Wegen dem VBA => Eigeninitiative; steht alles da
Wegen der Batch => per SET Befehl => Eigeninitiative

//EDIT: So, hatte gerade den ersten Kaffee. Nimm AutoIT.
in der beigefügten .au3 den Produktiv-Ordner angeben (beispielhaft : C:\B)
Kompiliere beigefügte .au3
Die Dateiliste muß als .txt vorliegen und folgende Form aufzeigen : C:\A\1.tif
sieht dann so aus:
hwvgwdh5.png

Code:
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>
#include <File.au3>
#include <string.au3>
#include <WinAPIFiles.au3>

Func Example()

GUICreate("KAMERA-Tif ", 500, 100, 300, 100)

; ORDNER angeben, wohin die Datein kopiert werden sollen
$folderPRODUKTIV = "C:\B"

; nach txt-Datei durchsuchen & anzeigen
$sFileOpenDialog = FileOpenDialog("Bitte TXT wählen", @ScriptDir & "\", "Textdatei (*.txt)", $FD_FILEMUSTEXIST, "")

$file = FileOpen($sFileOpenDialog, 0)


; GUI
Opt("GUICoordMode", 2)
 GUICtrlCreateLabel("Datei gewählt : " & $sFileOpenDialog, 2, 5)
  GUICtrlCreateLabel("PRODUKTIV Ordner : " & $folderPRODUKTIV, -1, 5)
  $Button1 = GUICtrlCreateButton("KOPIEREN", -1, 0, 100)
  $Button2 = GUICtrlCreateButton("LÖSCHEN", 0, -1)
  $Button3 = GUICtrlCreateButton("DURCHSUCHEN", 0, -1)

  GUISetState()


; Solange anzeigen, bis X gedrückt wird
  While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
       Exit

;KOPIEREN
Case $msg = $Button1
   While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    FileCopy ($line, $folderPRODUKTIV , $FC_OVERWRITE)
WEnd
FileClose($file)

;LÖSCHEN
Case $msg = $Button2
FileDelete($folderProduktiv & "\*")

;DURCHSUCHEN
Case $msg = $Button3
;wenn Button Durchsuchen, Programm schließen & nochmals starten
;Run( FileGetShortName(@AutoItExe) & " " & FileGetShortName(@ScriptFullPath))
Run( FileGetShortName(@AutoItExe) & " " & FileGetShortName(@ScriptDir))
Exit
EndSelect
 WEnd
EndFunc

Example()
Exit
 

Anhänge

Zuletzt bearbeitet:
Muss leider nochmals auf das Thema kommen und mich herzlich bei allen bedanken.

Lokal funktioniert alles. Nun habe ich das Problem, dass die Dateien

von einem Netzwerklaufwerk auf ein anderes kopiert werden muss.

Hier steigt steigt die Batch leider aus.

Was muss ich noch berücksichten ?

Und nochmals Danke
 
@Nachtfalke-2000
Batch hat Probleme mit UNC-Pfaden.

per Anmeldeskript (kix & Co.) die Laufwerke automatisch mappen lassen
oder
per Hand (Arbeitsplatz > Extras > Netzlaufwerk verbinden > Verbindung bei Anmeldung wiederherstllen
+
den Laufwerksbuchstaben + Pfadangabe in der Batch entsprechend anpassen

oder direkt in der Batch hinterlegen:
Code:
net use Y: \\server1\freigabe
net use Z: \\server2\freigabe
pause
FOR /f "delims=" %%i IN ('FINDSTR . "liste.txt"') DO (
copy /Y Y:\A\%%i Z:\B
)
net use /y /delete Y:
net use /y /delete Z:
 
jetzt hat sich das Ganze geändert.

Per Abfrage " bitte geben Sie die Nummer ein" soll eine Datei mit genau dieser Nummer von Ordner A in den Ordner B verschoben werden.

normalerweise move c:\test\12.txt c:\test\aktiv

Aber wie mach ich das mit der Abfrage am Anfang?
 
Hallo,

das Thema ist zwar schon recht alt, aber ich versuch es hierüber trotzdem mal.
Die Lösung des Kopierens anhand einer txt Datei ist super! Funktioniert auch ohne Probleme.

@Echo off
FOR /f "delims=" %%i IN ('FINDSTR . "liste.txt"') DO (
copy /Y C:\Users\XXX\Desktop\A\%%i C:\Users\XXX\Desktop\B
)

Was müsste man dazu schreiben, wenn die Dateien (die in der Liste der txt stehen) nicht gefunden werden und in ein anderes txt geschrieben werden sollen? Damit könnte man die fehlenden nachreichen.

Um eure Hilfe wäre ich sehr dankbar!

LG
Kimberly
 
Versuch mal via Errorlevel. Datei nicht gefunden gibt '4' aus beim Kopiervorgang, daher teste mal:
Code:
@Echo off
FOR /f "delims=" %%i IN ('FINDSTR . "liste.txt"') DO (
    xcopy /Y C:\Users\XXX\Desktop\A\%%i C:\Users\XXX\Desktop\B>nul 2>&1
    if "!errorlevel!"=="4" echo "%%i">>missing.txt
)
 
Zurück
Oben