Top-Themen

Aktuelle Themen (A bis Z)

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 aus einem Quellverzeichnis in Backupverzeichnis kopieren und in zehn Zielverzeichnisse verschieben

Frage Entwicklung Batch & Shell

Mitglied: fritzel

fritzel (Level 1) - Jetzt verbinden

27.12.2011, aktualisiert 11:51 Uhr, 2441 Aufrufe, 16 Kommentare

Hallo zusammen und nachträglich frohe Weihnachten

ich habe lange gesucht und leider nichts finden können, was meinem Vorhaben entspricht:

Ich möchte jeweils eine Datei aus einem Quellverzeichnis (mit unterschiedlicher, möglicher Anzahl) zuerst in ein Backupverzeichnis kopieren und dann in eines von zehn Zielverzeichnisse verschieben.


So soll es aussehen:
Quelldatei 1 kopieren nach Backupverzeichnis, dann verschieben nach Zielverzeichnis 1
Quelldatei 2 kopieren nach Backupverzeichnis, dann verschieben nach Zielverzeichnis 2
Quelldatei 3 kopieren nach Backupverzeichnis, dann verschieben nach Zielverzeichnis 3
Quelldatei 4 kopieren nach Backupverzeichnis, dann verschieben nach Zielverzeichnis 4
......
......
Quelldatei 10 kopieren nach Backupverzeichnis, dann verschieben nach Zielverzeichnis 10
Quelldatei 11 kopieren nach Backupverzeichnis, dann verschieben nach Zielverzeichnis 1
Quelldatei 12 kopieren nach Backupverzeichnis, dann verschieben nach Zielverzeichnis 2
......
......



Wichtig ist das 1. das ganze nicht abbricht wenn im Quellverzeichnis KEINE Datei vorhanden ist und das die Zielverzeichnisse jeweils nur mit einer Datei "gefüttert" werden in fortlaufender, sich wiederholender Reihenfolge (Zielverzeichnis 1 - 10).


Gruß, Fritzel
Mitglied: PhilippBeitz
27.12.2011 um 12:57 Uhr
Suchst du dafür ein Tool ? Oder brauchst du ein Script ?
Bitte warten ..
Mitglied: fritzel
27.12.2011 um 13:02 Uhr
Hallo Philipp,

suche hierfür ein Script.
Bitte warten ..
Mitglied: Friemler
27.12.2011 um 13:08 Uhr
Hallo Fritzel,

Deine Anforderungen sind etwas mager beschrieben. Ich habe bei meinem Lösungsvorschlag mal vermutet, dass sich die Nummerierung der Quelldateien aus ihrer Sortierreihenfolge ergibt (alphabetisch, aufsteigend, nach Dateiname und -erweiterung).

01.
@echo off & setlocal 
02.
 
03.
set "SrcDir=." 
04.
set "BackupDir=E:\Backup" 
05.
 
06.
set "NDestDirs=10" 
07.
set "DestDir1=E:\Verzeichnis 1" 
08.
set "DestDir2=E:\Verzeichnis 2" 
09.
set "DestDir3=E:\Verzeichnis 3" 
10.
set "DestDir4=E:\Verzeichnis 4" 
11.
set "DestDir5=E:\Verzeichnis 5" 
12.
set "DestDir6=E:\Verzeichnis 6" 
13.
set "DestDir7=E:\Verzeichnis 7" 
14.
set "DestDir8=E:\Verzeichnis 8" 
15.
set "DestDir9=E:\Verzeichnis 9" 
16.
set "DestDir10=E:\Verzeichnis 10" 
17.
 
18.
for /f "tokens=1* delims=:" %%a in ('dir /b /a:-d-h-s /o:ne "%SrcDir%" 2^>NUL ^| findstr /n "^"') do ( 
19.
  call :ProcessFile %%a "%%b" 
20.
21.
 
22.
exit /b 
23.
 
24.
 
25.
:ProcessFile 
26.
  set /a i=(%1-1)%%%NDestDirs%+1 
27.
  echo copy "%SrcDir%\%~2" "%BackupDir%" 
28.
  call echo move "%SrcDir%\%~2" "%%DestDir%i%%%" 
29.
exit /b
Der Code ist noch nicht "scharf" geschaltet, dazu müssen erst noch die ECHO-Befehle aus den Zeilen 27 und 28 entfernt werden.

Gruß
Friemler
Bitte warten ..
Mitglied: fritzel
27.12.2011 um 13:22 Uhr
Hallo Friemler,

ok, dachte ich hätte es auführlich genug ausgedrückt...

Also: die Quelldateien haben immer die Dateiendung .DAT; sie sollen nicht umbenannt werden. Einfach nur in die Ordner 1 - 10 kopiert werden; die 11. Datei dann wieder in Ordner 1, die 12. Datei in Ordner 2 etc.


Gruß, Fritzel
Bitte warten ..
Mitglied: Skyemugen
27.12.2011 um 13:27 Uhr
Aloha Friemler liest man auch mal etwas von dir,

[OT]
das hätte ich von dir aber nicht erwartet, dass du die DesrDirs alle manuell anlegen lässt *gg*
[/OT]

greetz André

P.S.: set /a i=(%1-1) warum muss ich bei derartigen is immer ans Visual Basic denken *grübel*
Bitte warten ..
Mitglied: Friemler
27.12.2011 um 13:34 Uhr
Hallo Fritzel,

tja, und woraus ergibt sich bei Dir die Nummer einer x-beliebigen Datei?...

Wie gesagt, ich habe mal auf die alphabetische Sortierreihenfolge getippt. Weitere Möglichkeiten wären z.B. das Erstellungsdatum, die Größe oder die physikalische Reihenfolge der Dateinamenseinträge im Verzeichnis. Aufsteigende und absteigende Sortierung bringt weitere Variationen.

Teste den obigen Code einfach mal. Er verändert nichts an Deinem System sondern gibt nur aus, was er tun würde. Dann siehst Du ja, ob das Deinen Anforderungen entspricht.

Gruß
Friemler
Bitte warten ..
Mitglied: Friemler
27.12.2011 um 13:43 Uhr
Moin André,

ja, habe in letzter Zeit viel zu tun und mache mich deshalb etwas rar. Aber z.Z. ist ein kurzer Urlaub angesagt.

Btr. Manuelle DestDirs:
Es sind ja nur 10 Verzeichnisse. Zuerst hatte ich auch an ein Batch-Pseudo-Array gedacht mit Indizierung über eine berechnete Tokennummer einer FOR /F-Schleife, aber die Verzeichnisnamen könnten ja Leerzeichen enthalten und die Verarbeitung mehrerer in Anführungszeichen eingeschlossener Zeichenketten haben die Redmonder Praktikanten durch einen Programmierfehler bei FOR /F unmöglich gemacht. Bei einer normalen FOR-Schleife mit manuellem inkrementieren eines Hilfszählers und Vergleich mit dem berechneten Wert laut Formel aus Zeile 26 wird verzögerte Variablenerweiterung benötigt - das gefiel mir auch nicht. Deshalb etwas umständlich und Anfängertauglich.

Gruß
Friemler
Bitte warten ..
Mitglied: Skyemugen
27.12.2011 um 14:41 Uhr
Aloha Friemler,

ja Urlaub ist gut, genieße ich auch derzeit

Gefiel dir eine FOR /L nicht? Du weißt schon so à la for /l %%s in (1,1,%NDestDirs%) do set "DestDir%%s=E:\Verzeichnis %%s"

Rein für's Anlegen

greetz André
Bitte warten ..
Mitglied: Friemler
27.12.2011 um 14:50 Uhr
Hi André,

stimmt, wäre eine Möglichkeit. Aber ein gutes Essen macht träge (anscheinend auch im Kopf) .

Gruß
Friemler
Bitte warten ..
Mitglied: Biber
31.12.2011 um 16:04 Uhr
Sache ma', Fritzel,

meinst du, du könntest noch diese Jahr, zum Beispiel während das Raclette heute abend vorgeheizt wird, einen minzefarbenen Haken für die vielen hilfreichen Antworten vergeben?

Oder sind noch Fragen offen?

Grüße
Biber
Bitte warten ..
Mitglied: fritzel
05.01.2012 um 13:50 Uhr
Hallo zusammen und ein frohes neues noch

sorry, war im Urlaub "verschwunden", deshalb keine Reaktion....

sooo, wollte nun mal testen, und habe das Script angepasst, erhalte jedoch leider folgende Fehlermeldung:


[URL=http://s1.directupload.net/file/d/2760/zhpgco4w_gif.htm][IMG]http://s1.directupload.net/images/120105/temp/zhpgco4w.gif[/IMG][/URL]
Bitte warten ..
Mitglied: Skyemugen
05.01.2012 um 15:04 Uhr
... dir ist schon klar, dass das hier eine batch ist und kein vbs?
Bitte warten ..
Mitglied: fritzel
09.01.2012 um 11:28 Uhr
hello again, ups - "wer lesen kann ist klar im Vorteil"

als "BATCH" funktioniert das ganze super, danke euch allen schonmal.

Aber:

wie kann ich das BATCH nun so erweitern, das es sich "merkt" in welches Verzeichnis er das letzte mal kopiert hat (z.B: x05) und beim wiederaufruf dann ensprechend weitermacht (in diesem Falle dann X06) ?
Bitte warten ..
Mitglied: fritzel
12.01.2012 um 19:27 Uhr
... lässt sich das nicht realisieren ?
Bitte warten ..
Mitglied: fritzel
16.01.2012 um 23:14 Uhr
warte geduldig auf Hilfe von den vielen Profis hier...
Bitte warten ..
Mitglied: Friemler
18.01.2012 um 18:15 Uhr
Hallo fritzel,

so, heute hatte ich mal Zeit mich mit Deiner Sache zu beschäftigen.

Das neue Script merkt sich die Nummer des Verzeichnisses, in das zuletzt eine Datei kopiert wurde, in einem INI-File. Dieses INI-File kann Einträge für mehrere Quellverzeichnisse enthalten.

Wie beim letzten Mal ist der Code nicht scharf geschaltet sondern zeigt nur an, was er tun würde. Das INI-File wird trotzdem erstellt. Nachdem Du getestet hast, kannst Du in den Zeilen 77 und 78 den echo-Befehl entfernen.

01.
@echo off & setlocal 
02.
 
03.
::********** Config-Variablen ********** 
04.
set "SrcDir=E:\Test\Quelle" 
05.
set "BackupDir=E:\Test\Backup" 
06.
 
07.
set "NDestDirs=10" 
08.
set "DestDir1=E:\Test\Verz1" 
09.
set "DestDir2=E:\Test\Verz2" 
10.
set "DestDir3=E:\Test\Verz3" 
11.
set "DestDir4=E:\Test\Verz4" 
12.
set "DestDir5=E:\Test\Verz5" 
13.
set "DestDir6=E:\Test\Verz6" 
14.
set "DestDir7=E:\Test\Verz7" 
15.
set "DestDir8=E:\Test\Verz8" 
16.
set "DestDir9=E:\Test\Verz9" 
17.
set "DestDir10=E:\Test\Verz10" 
18.
::************************************** 
19.
 
20.
::Aus einer INI-Datei, die den gleichen Namen wie das Script hat, 
21.
::wird die Nummer des letzten Verzeichnisses ausgelesen, in das 
22.
::beim letzten Scriptlauf eine Datei kopiert wurde. 
23.
::In der INI-Datei können Einträge für verschiedene Quellverzeichnisse 
24.
::stehen. Ein Eintrag ist nach dem Muster 
25.
::      PfadZumQuellverzeichnis=Nummer 
26.
::aufgebaut. 
27.
set /a Offset=0 
28.
 
29.
if exist "%~dpn0.ini" ( 
30.
  for /f "usebackq tokens=1* delims==" %%a in ("%~dpn0.ini") do ( 
31.
    if "%%a" equ "%SrcDir%" ( 
32.
      set /a Offset=%%b 
33.
34.
35.
36.
 
37.
::Aus der eingelesenen Nummer mit der Modulo-Funktion den Offset für 
38.
::den aktuellen Scriptlauf berechnen. 
39.
set /a Offset=Offset%%NDestDirs 
40.
 
41.
::Dateien im Quellverzeichnis verarbeiten 
42.
for /f "tokens=1* delims=:" %%a in ('dir /b /a:-d-h-s /o:ne "%SrcDir%" 2^>NUL ^| findstr /n "^"') do ( 
43.
  call :ProcessFile %%a "%%b" 
44.
45.
 
46.
::Die alte INI-Datei zeilenweise auslesen und dabei nach der Zeile 
47.
::suchen, die zum aktuellen Quellverzeichnis gehört. Diese Zeile 
48.
::wird mit aktualisiertem Wert in eine temporäre INI-Datei geschrieben. 
49.
::Alle anderen Zeilen werden unverändert in diese Datei geschrieben. 
50.
::Falls die INI-Datei noch nicht existiert, wird eine temporäre 
51.
::INI-Datei angelegt, die nur den Eintrag für das aktuelle Quell- 
52.
::verzeichnis enthält. 
53.
if exist "%~dpn0.ini" ( 
54.
  for /f "usebackq tokens=1* delims==" %%a in ("%~dpn0.ini") do ( 
55.
    if "%%a" neq "%SrcDir%" ( 
56.
      >>"%~dpn0_new.ini" echo %%a=%%b 
57.
    ) else ( 
58.
      >>"%~dpn0_new.ini" echo %%a=%i% 
59.
60.
61.
) else ( 
62.
  > "%~dpn0_new.ini" <NUL set /p "=%SrcDir%=%i%" 
63.
  >>"%~dpn0_new.ini" echo. 
64.
65.
 
66.
::Die temporäre INI-Datei umbenennen und dabei die ggf. schon existierende 
67.
::alte INI-Datei ohne Nachfrage überschreiben. 
68.
move /y "%~dpn0_new.ini" "%~dpn0.ini" > NUL 
69.
 
70.
::Script Ende 
71.
exit /b 
72.
 
73.
 
74.
::Unterprogramm 
75.
:ProcessFile 
76.
  set /a i=(%1-1+Offset)%%NDestDirs+1 
77.
  echo copy "%SrcDir%\%~2" "%BackupDir%" 
78.
  call echo move "%SrcDir%\%~2" "%%DestDir%i%%%" 
79.
exit /b

Gruß
Friemler
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Ordner per Batch verschieben, Datei kopieren
gelöst Frage von Shape.ShifterBatch & Shell2 Kommentare

Guten Abend :) Ich möchte mein Backup etwas anpassen und muss dafür viele Ordner verschieben und jeweils eine Datei ...

VB for Applications
Variable Tabelle kopieren und in neue Excel-Datei verschieben
gelöst Frage von Gimli3311VB for Applications5 Kommentare

Guten Zusammen, ich bin grad Praktikant bei einem Unternehmen und muss aus verschiedenen Excel Dateien die jeweils eine Tabelle ...

Windows 10
Kopieren und Verschieben von Dateien auf gemappte Netzlaufwerke nicht möglich
gelöst Frage von tycoonWindows 107 Kommentare

Hallo zusammen, ich habe das Problem, dass ich in gemappte Netzlaufwerke nichts reinkopieren kann. Ich kann aber ganz normal ...

Batch & Shell
Ordner durchsuchen - wenn "bestimmter Text" in einer Datei enthalten, diese Datei in einen anderen Ordner kopieren oder verschieben
gelöst Frage von ConcurveBatch & Shell14 Kommentare

Hallo zusammen, ich habe ein Problem bei der Erstellung einer *.bat, welche innerhalb eines zu definierenden Ordners alle Dateien ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 12 StundenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 12 StundenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 20 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Windows Server
Kann man im KMS nachschauen , wieviele Clients den Key in Anspruch genommen haben
gelöst Frage von rainergugusWindows Server15 Kommentare

Hallo, wir haben einen KMS Windows 10 Key. Dieser ist ja W7 kompatibel. Aber unser Windows 7 Pool registriert ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...