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
Kommentar vom Moderator Biber am 21.11.2013 um 23:18:26 Uhr
Zitat von Brother-Tuck:

Wenn wir das ganze umbennenen auf max. 1 mal einschränken, wäre es dann einfacher?
set /a rgc+=1
#884

Vielleich bekommen wir dieses Jahr noch die 888 hin...

Batch xcopy - Quelle und Ziel zeilenweise aus txt-Dateien entnehmen

Mitglied: Brother-Tuck

Brother-Tuck (Level 1) - Jetzt verbinden

19.11.2013, aktualisiert 11:10 Uhr, 1715 Aufrufe, 11 Kommentare

Hallo Zusammen,

ich komm gerade einfach nicht weiter...
Habe leider nichts passendes über die Suchfunktion oder Google gefunden.

Ich habe eine Batch-Datei, in der 2 Textdateien (TA & TB) erstellt werden, in denen sich Pfadangaben befinden.
(TA: M:\Ordner1\Ordner2 | TB: K:\Ordner3)
Mit xcopy würde ich gerne immer aus der TA die Quelle entnehmen und aus TB das Ziel.
Das ganze ist Zeilenweise aufgebaut werden, das heißt die 1.Quelle steht in TA in der 1.Zeile, das 1.Ziel steht in TB in der 1.Zeile.
Die 2.Quelle steht in TA in der 2.Zeile, das 2.Ziel steht in TB in Zeile 2 usw.
Es sollen alle Dateien kopiert und überschrieben werden, vorausgesetzt dass die vorhandene Dateien älter sind und die Dateien gleich groß sind.
Sollte die Datei nicht gleich Groß sein, soll die Datei fortlaufend umbenannt werden, d.h. wenn Datei ABC.txt bereits abliegt, dann soll die neue Datei als ABC_01.txt abgelegt werden.
Sollte nocheinmal eine Datei hinzukommen, die weder der Größe von ABC.txt oder ABC_01.txt hat, soll diese Datei in ABC_02 umbenannt werden usw.

Leider habe ich immer irgend einen Fehler in meinen Lösungen...
Hier mal einer meiner Versuche... (die Überprüfung auf Größe und die Umbenennung der Dateien sind mir gerade erst eingefallen, wäre nice-to-have aber nicht unbedingt nötig)

01.
for /f "delims=" %%m in ("K:\Abgleich\%Date%\Path_M_%Date%.txt") do (
02.
for /f "delims=" %%k in ("K:\Abgleich\%Date%\Path_K_%Date%.txt") do (
03.
xcopy "%%m" "%%k" /c /d /e /f /y >> K:\Abgleich\%Date%\Backup_%Date%.txt))
Schön wäre noch wenn die Kopiervorgänge mitgeloggt werden, aber das wäre wirklich nur ein Schönheitsfeature.
Vielleicht hat ja einer gerade den passenden Code-Schnipsel da, ich wäre für jede Hilfe dankbar.


Mit freundlichen Grüßen

Brother-Tuck
Mitglied: Endoro
20.11.2013 um 00:07 Uhr
Hi, da hast du dir eine schöne Frage ausgesucht! Deshalb auch die zahlreichen Antworten
01.
@ECHO OFF &SETLOCAL
02.
<TA.TXT (
03.
FOR /F "delims=" %%a in (TB.TXT) do (
04.
	set "fname="
05.
	set /p "fname="
06.
	set "nname=%%a"
07.
	SETLOCAL ENABLEDELAYEDEXPANSION
08.
	if exist "!nname!" call:namecorr "!fname!" "!nname!" fname nname
09.
	echo(f|xcopy "!fname!" "!nname!" /cdfyl
10.
	endlocal
11.
))
12.
goto:eof
13.

14.
:namecorr "!fname!" "!nname!" fname nname
15.
setlocal
16.
set "nname=%~2"
17.
for /f "delims=" %%a in ('dir /b /a-d /on "%~f2" "%~dpn2_??%~x2"') do (
18.
	for /f "delims=" %%b in ("%~dp2%%~a") do (
19.
		if not "%~z1"=="%%~zb" set "flag=true"
20.
	)
21.
	set "last=%%a"
22.
)
23.
if not defined flag goto:return
24.
:loop
25.
set /a cnt+=1
26.
set "pfx=0%cnt%"
27.
set "pfx=%pfx:~-2%"
28.
set "last=%~dpn2_%pfx%%~x2"
29.
if exist "%last%" goto:loop
30.
set "nname=%last%"
31.
:return 
32.
endlocal&set "%~3=%fname%"&set "%~4=%nname%"
33.
exit /b
lg.
Bitte warten ..
Mitglied: Brother-Tuck
20.11.2013, aktualisiert um 10:19 Uhr
Erstmal vielen Dank für deine Mühe, Endoro.

Leider passiert bei mir nichts... ich habe das @echo off mal entfernt, aber wirklich mehr Informationen habe ich leider nicht bekommen...

Der Inhalt der TXT-Dateien sieht wie folgt aus (ohne Quelle: und ohne Ziel: ):

Quelle: M:\ABCDEz_1234\KLM_006789
Ziel: K:\ABCDEz_1234KLM6789_Q-RST-4321_Z-RST-4321

Die Dateinamen heißen:

Quelle: K:\Abgleich\%Date%\Path_M_%Date%.txt
Ziel: K:\Abgleich\%Date%\Path_K_%Date%.txt

Alle Dateien in %Quelle% in den Ordner %Ziel% kopieren, unter den oben genannten Kriterien.
Ich blicke bei deinem Code leider nicht durch, deshalb kann ich daran leider kaum etwas verändern.
Wäre super, wenn du mir nochmal helfen könntest, vielen Dank.
Bitte warten ..
Mitglied: Endoro
20.11.2013 um 12:56 Uhr
Zitat von Brother-Tuck:
Der Inhalt der TXT-Dateien sieht wie folgt aus (ohne Quelle: und ohne Ziel: ):

Quelle: M:\ABCDEz_1234\KLM_006789
Ziel: K:\ABCDEz_1234KLM6789_Q-RST-4321_Z-RST-4321

Die Dateinamen heißen:

Quelle: K:\Abgleich\%Date%\Path_M_%Date%.txt
Ziel: K:\Abgleich\%Date%\Path_K_%Date%.txt
Vermutlich verstehe ich das nicht. Wie sollen die Dateinamen aus der Textdatei abgeleitet werden, wo doch die Pfade unterschiedlich sind?
lg.
Bitte warten ..
Mitglied: Brother-Tuck
20.11.2013, aktualisiert um 15:24 Uhr
Der Ordner wo die Skripte liegen und die TXT-Dateien gespeichert werden heist Abgleich, hat sonst keine Relevanz.
An sich gleicht das Backup halt die Daten zueinander ab, unter M:\ werden neue Daten angeliefert, die für mehrere Parteien gelten.
Am Ziel, unter K:\ werden die Daten gespeichert, welche Relevant sind.
Bitte warten ..
Mitglied: Endoro
20.11.2013 um 18:45 Uhr
Ja, das ist klar soweit. Die Schwierigkeiten entstehen durch die "Suffixkinddateien" an die _?? angehängt wurde. Wenn im Quellverzeichnis die Datei TEST.DAT steht, die im Zielverzeichnis fehlt, dafür aber die Dateien TEST_01.DAT und TEST_03.DAT im Zielverzeichnis stehen, weiss ich nicht, welches die Zieldatei ist, von deren Eigenschaften das weitere Vorgehen abhängt.

Diese Suffixkinder führen letztlich auch dazu, dass vor dem Kopieren des Ordners mit xcopy viele Ausnahmen zeitraubend einzeln behandelt werden müssen. Xcopy ist ja keine Versionsverwaltung. Vielleicht unterstützt ein Archivierer so etwas.

lg.
Bitte warten ..
Mitglied: Brother-Tuck
21.11.2013, aktualisiert um 10:12 Uhr
Habe ich verstanden.

Wenn wir das ganze umbennenen auf max. 1 mal einschränken, wäre es dann einfacher?
Also nur jede 1.Datei mit Identischem Dateinamen vergleichen und falls diese nicht in ihrer Größe übereinstimmen, umbenennen (_001 usw.) und kopieren?

Mir geht es vor allem darum das die beiden Txt-Dateien als Quelle für Quell- und Ziellokation verwendet werden.
TA.txt als Quelle und TB.txt als Ziel und das halt Zeilenweise, wie im ersten Post beschrieben, danke.
Das mit den doppelten Dateien, kann ich auch noch irgendwie anders lösen und wenn ich wöchentlich nen Backup machen muss... (rund 100MB Gesamtdaten)

Gruß Brother-Tuck
Bitte warten ..
Mitglied: Endoro
21.11.2013, aktualisiert um 19:19 Uhr
Hi, ich habs mal mit den von dir gewünschten Ausnahmen geschrieben. Beim Batch-Script-Schreiben befällt mich bisweilen das Gefühl, im Raumanzug umherzutapsen. Und wie jeder schlechte Programmierer habe ich nichts kommentiert
01.
@ECHO OFF &SETLOCAL
02.
set "tfileA=ta.txt"
03.
set "tfileB=tb.txt"
04.

05.
for /f "tokens=1*delims=:" %%a in ('findstr /n $ "%tfileA%"') do set "$a%%a=%%b"&set /a foldersA=%%a
06.
for /f "tokens=1*delims=:" %%a in ('findstr /n $ "%tfileB%"') do set "$b%%a=%%b"&set /a foldersB=%%a
07.
if "%foldersA%"=="%foldersB%" (echo %foldersA% folder(s^) found in %tfileA%.) else echo Folder mismatch: %tfileA%:%foldersA% - %tfileB%:%foldersB%&goto:eof
08.
:loopFd
09.
set /a countFd+=1
10.
call:folderchk "%%$a%countFd%%%"="%%$b%countFd%%%"
11.
if %countFd% lss %foldersA% goto:loopFd
12.
goto:eof
13.

14.
:folderchk
15.
setlocal
16.
set "tfileEx=%temp%\%random%.tmp%"
17.
for /f "delims=" %%a in ("%tfileEx%") do set "tfileEx=%%~sa"
18.
for %%a in ("%~1\*") do call:exceptionchk "%%~a" "%~2" "%tfileEx%"
19.
set "cmdline=/dyl"
20.
if exist "%tfileEx%" set "cmdline=%cmdline% /EXCLUDE:%tfileEx%"
21.
xcopy "%~1" "%~2" %cmdline% 
22.
if exist "%tfileEx%" del "%tfileEx%"
23.
endlocal
24.
exit /b
25.

26.
:exceptionchk
27.
setlocal
28.
for /f "delims=" %%a in ('dir /b /a-d "%~2\%~nx1" "%~2\%~n1_???%~x1" 2^>nul') do set "last=%%~a"
29.
if not defined last goto:return
30.
for /f "delims=" %%a in ("%~2\%last%") do set "lastsize=%%~za"
31.
if "%~nx1"=="%last%" if "%~z1"=="%lastsize%" goto:return
32.
for /f "delims=" %%a in ("%last%") do set "pfx=%%~na"
33.
for /f "tokens=*delims=0" %%a in ("%pfx:~-3%") do set /a sfx=%%~a 2>nul&&set /a sfx+=1||set /a sfx=1 
34.
if %sfx%==1 set "pfx=%~n1_000"
35.
set "sfx=000%sfx%"
36.
set "sfx=%sfx:~-3%"
37.
set "nname=%pfx:~0,-3%%sfx%%~x1"
38.
echo Exception: %~nx1 --^> %nname%
39.
echo(f|xcopy /yl "%~1" "%~2\%nname%" >nul
40.
>>"%~3" echo(%~1
41.
:return
42.
endlocal
43.
exit /b
lg.
Bitte warten ..
Mitglied: Brother-Tuck
25.11.2013 um 08:09 Uhr
Zitat von Endoro:

01.
> @ECHO OFF &SETLOCAL
02.
> set "tfileA=ta.txt"
03.
> set "tfileB=tb.txt"
04.
> 
05.
> for /f "tokens=1*delims=:" %%a in ('findstr /n $ "%tfileA%"') do set "$a%%a=%%b"&set
06.
> /a foldersA=%%a
07.
> for /f "tokens=1*delims=:" %%a in ('findstr /n $ "%tfileB%"') do set "$b%%a=%%b"&set
08.
> /a foldersB=%%a
09.
> if "%foldersA%"=="%foldersB%" (echo %foldersA% folder(s^) found in %tfileA%.) else echo Folder mismatch:
10.
> %tfileA%:%foldersA% - %tfileB%:%foldersB%&goto:eof
11.
> :loopFd
12.
> set /a countFd+=1
13.
> call:folderchk "%%$a%countFd%%%"="%%$b%countFd%%%"
14.
> if %countFd% lss %foldersA% goto:loopFd
15.
> goto:eof
16.
> 
17.
> :folderchk
18.
> setlocal
19.
> set "tfileEx=%temp%\%random%.tmp%"
20.
> for /f "delims=" %%a in ("%tfileEx%") do set "tfileEx=%%~sa"
21.
> for %%a in ("%~1\*") do call:exceptionchk "%%~a" "%~2" "%tfileEx%"
22.
> set "cmdline=/dyl"
23.
> if exist "%tfileEx%" set "cmdline=%cmdline% /EXCLUDE:%tfileEx%"
24.
> xcopy "%~1" "%~2" %cmdline% 
25.
> if exist "%tfileEx%" del "%tfileEx%"
26.
> endlocal
27.
> exit /b
28.
> 
29.
> :exceptionchk
30.
> setlocal
31.
> for /f "delims=" %%a in ('dir /b /a-d "%~2\%~nx1" "%~2\%~n1_???%~x1" 2^>nul') do set
32.
> "last=%%~a"
33.
> if not defined last goto:return
34.
> for /f "delims=" %%a in ("%~2\%last%") do set "lastsize=%%~za"
35.
> if "%~nx1"=="%last%" if "%~z1"=="%lastsize%" goto:return
36.
> for /f "delims=" %%a in ("%last%") do set "pfx=%%~na"
37.
> for /f "tokens=*delims=0" %%a in ("%pfx:~-3%") do set /a sfx=%%~a 2>nul&&set /a sfx+=1||set /a
38.
> sfx=1 
39.
> if %sfx%==1 set "pfx=%~n1_000"
40.
> set "sfx=000%sfx%"
41.
> set "sfx=%sfx:~-3%"
42.
> set "nname=%pfx:~0,-3%%sfx%%~x1"
43.
> echo Exception: %~nx1 --^> %nname%
44.
> echo(f|xcopy /yl "%~1" "%~2\%nname%" >nul
45.
> >>"%~3" echo(%~1
46.
> :return
47.
> endlocal
48.
> exit /b
49.
> 

Sorry, bin leider erst jetzt dazu gekommen dein Skript zu Testen.
Also an sich funktioniert es... das Logfile sagt das er mehrere Dateien kopiert hat.
Leider nicht an den entsprechenden Zielordner...
Ich habe TA.txt mit TB.txt mal getauscht, leider das gleiche Problem.
Habe auch die Pfade abgeändert und unter Laufwerk C: dein Skript getestet, leider ohne Erfolg...
Wäre super falls du nochmal drüber schauen könntest.
Aber auf jeden Fall schonmal vielen Dank für deine Bemühungen.
Bitte warten ..
Mitglied: Endoro
25.11.2013 um 09:11 Uhr
Hey, zur Fehlersuche wäre es gut zu wissen, wo falsch hin kopiert wurde und wo es hingehört hätte.
lg.
Bitte warten ..
Mitglied: Brother-Tuck
25.11.2013, aktualisiert um 10:32 Uhr
Zitat von Endoro:

Hey, zur Fehlersuche wäre es gut zu wissen, wo falsch hin kopiert wurde und wo es hingehört hätte.
lg.

Das ist richtig, aber leider weis ich das ja nicht.^^
Wo es hin gehört hätte, wäre ja das Verzeichnis in TB.txt.
Ich kann die Dateien leider nicht finden, wenn ich aber hinter Zeile 24 deines Skriptes ein Logfile setze, sagt er mir das er Dateien kopiert hat...

Das sieht dann so aus:

01.
5 Datei(en) kopiert
02.
K:\TT_0023GGG4697_Q-_Z-LLL-1598\BB.pdf
03.
1 Datei(en) kopiert
04.
K:\TT_0023GGG2813_Q-LLL-1598_Z-LLL-1598\DSF.pdf
05.
K:\TT_0023GGG2813_Q-LLL-1598_Z-LLL-1598\QR.pdf
06.
2 Datei(en) kopiert
07.
K:\TT_0023GGG2812_Q-_Z-LLL-1598\VA.pdf
08.
K:\TT_0023GGG2812_Q-_Z-LLL-1598\DSHN.pdf
09.
2 Datei(en) kopiert
10.
0 Datei(en) kopiert
11.
K:\TT_0023GGG2311_Q-LLL-1598_Z-LLL-1598\A.pdf
12.
K:\TT_0023GGG2311_Q-LLL-1598_Z-LLL-1598\GDTN.pdf
13.
2 Datei(en) kopiert
14.
0 Datei(en) kopiert
15.
0 Datei(en) kopiert
16.
K:\TT_0023GGG3303_Q-LLL-1598_Z-LLL-1598\SG.pdf
17.
1 Datei(en) kopiert
18.
0 Datei(en) kopiert
19.
0 Datei(en) kopiert
20.
0 Datei(en) kopiert
21.
K:\TT_0023GGG3836_Q-_Z-LLL-1598\BN.pdf
22.
K:\TT_0023GGG3836_Q-_Z-LLL-1598\RJ.pdf
23.
2 Datei(en) kopiert
24.
0 Datei(en) kopiert
25.
0 Datei(en) kopiert
26.
K:\TT_0023GGG4627_Q-LLL-1598_Z-LLL-1598\TK.pdf
27.
1 Datei(en) kopiert
Wohin diese Dateien geschrieben wurden, kann ich leider nicht sagen... Bei meinem letzten lokalen Suchvorgang wurde leider nichts gefunden.
Die Netzlaufwerke sind leider zu Groß als das ich Sie an einem Tag durchsuchen könnte...
Bitte warten ..
Mitglied: Endoro
28.11.2013 um 23:43 Uhr
Hey, dann schreib das doch in ein Logfile (Source folder, Destination folder, beabsichtigtes Zielverzeichnis).
lg.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Xcopy Batch-Datei
gelöst Frage von LauchheimerBatch & Shell3 Kommentare

Tag Leute, Ich habe in einer Batchdatei einen xcopy-Befehl. Dieser soll eine bestimmte Datei kopieren. Diesen führe ich mit ...

Batch & Shell
Batch Xcopy Probleme
gelöst Frage von GtaGamerBatch & Shell3 Kommentare

Hallo Administrator Community, Zurzeit versuche ich ein Tool für GTA 5 zu entwickeln, wo beim Start mit einer Batch ...

Entwicklung

Batch oder Powershell für .txt-Datei

gelöst Frage von freshman2017Entwicklung5 Kommentare

Hallo liebe Gemeinde, ich habe eine .txt-Datei, die aus einer Artikelnummer und einem Bildname bestehen soll. Ausgangsdatei (export.txt) ist ...

Windows 7

BATCH: Alter einer TXT-Datei bestimmen

gelöst Frage von ahstaxWindows 75 Kommentare

Hallo, wie bekomme ich mit einer DOS-Batch das Alter einer TXT-Datei bestimmt und lassen dann, bspw bei Alter >16h, ...

Neue Wissensbeiträge
Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 15 StundenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 1 TagWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Windows 10

Windows 10 - Programme laufen schneller, wenn Sie mit Administratorrechten ausgeführt werden

Erfahrungsbericht von 1Werner1 vor 2 TagenWindows 1013 Kommentare

Moin, das wollte ich erst nicht glauben, aber es ist so. Wenn Ihr ein Programm mit Administratorrechten unter Windows ...

Sicherheits-Tools
Putty hat heftige Bugs korrigiert!
Information von Lochkartenstanzer vor 3 TagenSicherheits-Tools8 Kommentare

Moin, Wie man aus herauslesen kann, sind in den Versionen vor 0.71 gravierende Bugs, die es angeraten erscheinen lassen, ...

Heiß diskutierte Inhalte
Server-Hardware
Kompatibilität Tray für HP Proliant DL385 G10 vs. G8, G9
Frage von chris123Server-Hardware19 Kommentare

Hallo, weiß einer der hier anwesenden, ob die Trays für 2,5 " HDDs zwischen einem DL 385 G10 und ...

Outlook & Mail
Office 365 mit Email-Profil installieren
gelöst Frage von 139221Outlook & Mail18 Kommentare

Hallo, kurz zu meiner Person: Vor ungefahr 10 Jahren habe ich eine Umschuldung zum Fachinformatiker für Systemintegration gemacht aber ...

LAN, WAN, Wireless
Glasfaserkabel verlegen und Anschlüsse setzen
Frage von LLL0rdLAN, WAN, Wireless13 Kommentare

Hallo Leute, ich muss demnächst ein Netzwerkkabel auf einer Länge von ca. 70 Metern verlegen. Das Netzwerkkabel soll dabei ...

Server-Hardware
Server Hardwareempfehlung für Projekt
gelöst Frage von heax22Server-Hardware12 Kommentare

Hallo zusammen, ich bin auf der Suche nach einer geeigneten Server Plattform um unter Hyper-V einen virtuellen Server 2016 ...