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

gelöst Batchprogramm unter WinXP

Mitglied: mapl99sb

mapl99sb (Level 1) - Jetzt verbinden

01.11.2010 um 00:59 Uhr, 2866 Aufrufe, 8 Kommentare

Hallo allerseits,

ich habe folgendes Problem: ich will Dateien, die in einem Quell-Ordner liegen per Batch in mehrere andere Ziel-Ordner kopieren. Die Zielordner sind Unterordner und entsprechen in den ersten 4 Stellen den ersten 4 Stellen der zu kopierenden Dateien. Bestehende, gleichnamige Dateien im Zielordner sollen überschrieben werden. Es soll ein kurzes Protokoll erstellt werden, damit klar ist, ob alle Quelldateien in den Zielordnern angekommen sind.

Bsp.:

Quellpfad ist c:\temp

Dateien darin lauten:
1000_a.pdf
1000_b.pdf
1000_a.png
1000_b.png
1010_a.png
2000_a.pdf
2000_a.png

Zielpfad ist d:\test
Die Unterordner dazu heissen (sie existieren schon):
d:\test\1000_x\
d:\test\1010_z\
d:\test\2000_y\

Am Ende sollte es so aussehen:

d:\test\1000_x enthält 1000_a.pdf, 1000_b.pdf, 1000_a.png, 1000_b.png
d:\test\1010_z\ enthält 1010_a.png
d:\test\2000_y enthält 2000_a.pdf, 2000_a.png

Das Ganze soll als Batchdatei unter Windows laufen.

Ich habe mit folgendem Batch leider nur einen Teilerfolg erreicht, da das Programm immer neue Pfade anlegt und nicht die bestehenden benutzt:

for %a in (c:\temp\*.*) do @for /f "delims=_ tokens=1" %i in ("%~nxa") do xcopy /I /Y %a c:\temp\%i\

Ein weiterer Versuch scheiterte auch, da ich das CD-Kommando nicht mit einem vernünftigen Wert versorgen kann:


for %%a in (c:\temp\*.*) do @for /f "delims=_ tokens=1" %%i in ("%%~nxa") do call :loop
:loop
cd %%i*
xcopy /I /Y c:\temp\%%a
cd ..

Kann mir jemand helfen???

Vielen Dank und viele Grüsse,
MAPL
Mitglied: bastla
01.11.2010 um 07:26 Uhr
Hallo mapl99sb und willkommen im Forum!

Das könnte etwa so gehen:
[Edit] Fehlendes Anführungszeichen am Ende der Zeile 29 ergänzt [/Edit]

Mit einer alternativen Schreibweise der Protokolleinträge ließe sich das noch kompakter formulieren:
Nur als Anmerkung: Protokolliert wird in beiden Fällen nicht der Kopiervorgang, sondern der Ordnerinhalt nach dem Kopieren (es war ja "angekommen" gefragt) ...

Zum jeweiligen Zielordner wäre noch zu erwähnen, dass in den ersten Ordner, dessen Name mit "<Teil 1 Dateiname>_" (also: Zeichenkette des Dateinamens bis zum ersten "_" + "_") entspricht, kopiert wird (auch wenn nach dem "_" nix oder mehr als ein Zeichen folgt - daher auch nach "1000_" oder "1000_abc").

Grüße
bastla
Bitte warten ..
Mitglied: mapl99sb
04.11.2010 um 19:00 Uhr
Hallo bastla,
danke für das Coding. Super.

Hat auch fast alles geklappt. Musste nur das ? in ("%Ziel%\%%i_?") und ("%Ziel%\*_?") in einen * ändern, dann klappte das Kopieren.

Was noch nicht klappt ist das Protokoll. Er zeigt mir nur die Pfade an, nicht die Dateien im Zielpfad.
Ausserdem werden alle Unterverzeichnisse im Zielverzeichnis angezeigt und nicht nur die, in die etwas hineinkopiert wurde.

Hast du eine Idee, woran es liegen könnte?

Viele Grüsse,
MAPL
Bitte warten ..
Mitglied: bastla
04.11.2010 um 19:08 Uhr
Hallo mapl99sb!
Was noch nicht klappt ist das Protokoll. Er zeigt mir nur die Pfade an, nicht die Dateien im Zielpfad.

Hast du eine Idee, woran es liegen könnte?
Am "?" ? Nö - das in Zeile 18 hattest Du ja auch schon gefunden ...

Mach doch mal aus dem "echo off" ein "echo on" und starte den Batch aus einem CMD-Fenster bzw füge am Ende noch eine Zeile mit "pause" hinzu - dann siehst Du, was genau passiert (und hoffentlich auch, warum etwas nicht passiert) ...

Außerdem kann's nicht schaden, die Zeile 20 auf
zu ändern ... (Alle angegebenen Zeilen beziehen sich auf den zweiten Ansatz.)

[Edit] Im ersten Batch fehlte in Zeile 29 das schließende Anführungszeichen - ist oben bereits nachgetragen (auch wenn's daran eigentlich nicht gelegen haben sollte); falls Du auch diesen Batch mit "pause" testen wolltest, müsste das zwischen die Zeilen 18 und 19 ... [/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: mapl99sb
06.11.2010 um 17:52 Uhr
Hi bastla,
habe noch einen -hoffentlich- letzten Punkt: das Protokoll wirft immer alle Pfade des Zielverzeichnisses aus.
Ich will aber nur die sehen, die auch geändert wurden. Ich habe deshalb das Coding des "Protokoll"-Teils ein wenig geändert.

Klappt soweit ganz gut. Hat nur einen Nachteil: da die Dateien mit dem gekürzten Namen (z.B. 1000 oder 1010) x mal vorkommen, wird auch der Pfad im Protokoll x-mal ausgegeben.

Gibt es eine Anweisung, mit der man das Ergebnis in %%i eindeutig machen kann, daß also die Dateinamen nur 1x vorkommen?

Vielen Dank im voraus.

Grüße, MAPL

[Edit Biber] Codetags [/Edit]
Bitte warten ..
Mitglied: bastla
06.11.2010 um 18:19 Uhr
Hallo mapl99sb!
Gibt es eine Anweisung, mit der man das Ergebnis in %%i eindeutig machen kann, daß also die Dateinamen nur 1x vorkommen?
Gibt es so nicht, da ja jede Datei "betrachtet" werden muss und sich %%i aus der Zerlegung des jeweiligen Dateinamens ergibt.

Es könnte aber (ungetestet) etwa so gehen:
Grüße
bastla
Bitte warten ..
Mitglied: mapl99sb
06.11.2010 um 23:14 Uhr
Klappt, super !!!!

Vielen Dank nochmals.

Grüsse, MAPL
Bitte warten ..
Mitglied: mapl99sb
06.09.2013, aktualisiert um 09:55 Uhr
Hallo,
habe noch eine weitere Anforderung zu dem Programm: und zwar soll es im Zielverzeichnis noch einen Pfad mit gleichem Namen anlegen, in den dann das File kopiert wird. Aber nur, wenn es den Pfad noch nicht gibt. Ansonsten sollen die Files wie bisher in die bestehenden Pfade kopiert werden, also in die, für die ein Match existiert zwischen Datei- und Padnamen.

Also ergänzend zum Beispiel oben:

Wenn zusätzlich eine Datei 3000_a.png existiert, im Zielverzeichnis aber kein Pfad, der mit 3000 beginnt, dann soll der Pfad d:\test\3000 angelegt werden und anschließend das File 3000_a.png dort hinein kopiert werden.

Wie und wo muss ich das in das Coding einsetzen?

Vielen Dank.

Hier mein aktuelles Coding:

@echo off & setlocal
set "Quelle=c:\Temp\Test"
set "Ziel=d:\Test"
set "Prot=%Quelle%\Prot_%date:~-4%-%date:~-7,2%-%date:~-10,2%_%time:~,2%%time:~3,2%%time:~6,2%.txt"
set "Prot=%Prot: =0%"

del "%Prot%" 2>nul
pushd "%Quelle%"
for /f "tokens=1* delims=_" %%i in ('dir /b /a-d e*_*.* 2^>nul') do (
set "Done="
for /d %%a in ("%Ziel%\%%i*") do if not defined Done (
copy "%%i_%%j" "%%a" >nul
set "Done=True"
)
)
popd

set "Liste=%Quelle%\Liste.txt"
copy nul "%Liste%"

for /f "tokens=1* delims=_" %%i in ('dir /b /a-d e*_*.* 2^>nul') do findstr "%%i" "%Liste%" || (
>>"%Liste%" echo %%i

for /d %%a in ("%Ziel%\%%i*") do (
echo %%~fa
dir /b /a-d "%%a" 2>nul
echo\
)
)>>"%Prot%"
Bitte warten ..
Mitglied: kontext
06.09.2013, aktualisiert um 10:13 Uhr
Moin mapl99sb,

bitte erstelle eine neue Frage.
Dieser Thread ist ja mittlerweile doch schon in die Jahre gekommen (und die Grundfrage ist ja gelöst) ...
... du kannst bei der neuen Frage gerne auf diese verlinken ...
... bitte beachte die Formatierungshilfe (FAQ) - vor allem die Code-Formatierung

Gruß
kontext (Mod)
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Mit Batchprogramm von Englisch auf Deutsch wechseln

Frage von FrankreichBatch & Shell7 Kommentare

Hallo Leute! Ich hätte eine bitte und zwar sollte ich zwischen zwei vorinstallierten sprachen wechseln können bzw eigentlich nur ...

Visual Studio

VB: Batchprogramm: Resultat zurückgeben an VB Form (Textfeld)

gelöst Frage von nepixlVisual Studio7 Kommentare

Hallo Admins, sitze aktuell an einem kleinen Problem. Per VB wird das Tool NCFTP(.exe) gestartet, NCFTP arbeitet allerdings im ...

Batch & Shell

WinXP-PC mit einem Barcodescanner herunterfahren

gelöst Frage von SinzalBatch & Shell8 Kommentare

Hallo Admins, ich habe einige Produktions-PCs, an denen WinXP läuft und ein Programm zur Produktionsdatenerfassung automatisch beim PC-Start startet. ...

Windows XP

Serverdienst auf einem WinXP Rechner remote neustarten

gelöst Frage von DasIstDochIrgendwieWindows XP2 Kommentare

Kann man auf einer XP Maschine den Serverdienst neustarten? Das Problem ist, dass nach Beenden des Serverdienstes ich keinen ...

Neue Wissensbeiträge
Netzwerkmanagement
How To Mikrotik Netinstall
Erfahrungsbericht von areanod vor 1 TagNetzwerkmanagement

Jedes Mal wenn ich Netinstall längere Zeit nicht benutzt habe stolpere ich über die „Besonderheiten“ dieser Software. Das ist ...

Microsoft
Microsoft: LDAPS per Update als Default
Information von em-pie vor 1 TagMicrosoft1 Kommentar

Hallo, Microsoft wird mit einem der zukünftigen Updates LDAP auf LDAPS per Default umstellen. Admins von angebundenen Systemen die ...

Humor (lol)

Funny: Warum es immer schwieriger wird, die richtigen Produkte online zu finden

Information von Dilbert-MD vor 2 TagenHumor (lol)17 Kommentare

Wir befinden uns in der Rubrik "Off Topic - Humor" und in 15 Minuten ist Freitag. und ja, es ...

Windows Update
MS SQL Server Updates
Information von sabines vor 3 TagenWindows Update

Für 2012, 2014 und 2016 sind seit Dienstag wichtige Sicherheitsupdates verfügar, die eine remote, leicht auszunutzende Lücke im Reporting ...

Heiß diskutierte Inhalte
Router & Routing
Suche Router der von einem Ethernet ein WLAN erzeugt
gelöst Frage von cdkurtRouter & Routing24 Kommentare

Hallo, ich bin auf der Suche nach einem Wlan Router/ Access Point der sich in einem Heim / Hotel ...

Utilities
Motherboard mit zwei Ethernet Adapter.?
Frage von Sibelius001Utilities17 Kommentare

Hallo, ist bestimmt eine "Dummy" Frage, die hier bestimmt schon x-mal diskutiert wurde (Dafür bitte ich mal vorab um ...

Sicherheitsgrundlagen
Frage zur allgemeinen Netzwerksicherheit
Frage von AbstrackterSystemimperatorSicherheitsgrundlagen15 Kommentare

Guten Tag zusammen, in letzter Zeit beschäftige ich mich, auch wenn ich "nur" Azubi bin, mit diversen Themen der ...

Windows Server
Wie groß kann die pagefile werden?
gelöst Frage von Ex0r2k16Windows Server13 Kommentare

Huhu, ich habe ein kleines Freitagsprojekt hochgezogen bei dem alle mitraten dürfen. Folgende Umgebung: HP Microserver gen 8 OS: ...