
115129
05.07.2015, aktualisiert um 20:47:21 Uhr
Batch - Verzeichnisnamen mit Dateinamen vergleichen, wenn vorhanden eine .log-Datei kopieren und zu .txt umbenennen
Hallo,
ich versuche gerade vergeblichst über die Google-Suche ein passendes Script für meine Anwendung zu finden, doch leider scheint es nichts passendes zu geben.
Das Script soll folgendes ausführen:
1. In "C:\Dir1\" enthaltene Verzeichnisnamen (ohne deren Unterverzeichnisse) vergleichen, ob in "C:\Dir2\" als Dateinamen vorhanden.
2. Wenn Datei in "C:\Dir2\" vorhanden, kopiere die im Unterverzeichnis enthaltene .log-Datei aus "C:\Dir1\tralala" nach "C:\Dir2\".
3. Beim Kopiervorgang soll die .log-Datei den Namen des Vergleichvorgangs aus 1. erhalten und soll von .log auf .txt umbenannt werden.
Der Quelltext mit dem ich rumexperimentiere, jedoch nix passiert:
Hat jemand Tipps oder könnte Ihn gar vervollständigen?
Vielen Dank.
Gruß,
Blattlaus
ich versuche gerade vergeblichst über die Google-Suche ein passendes Script für meine Anwendung zu finden, doch leider scheint es nichts passendes zu geben.
Das Script soll folgendes ausführen:
1. In "C:\Dir1\" enthaltene Verzeichnisnamen (ohne deren Unterverzeichnisse) vergleichen, ob in "C:\Dir2\" als Dateinamen vorhanden.
2. Wenn Datei in "C:\Dir2\" vorhanden, kopiere die im Unterverzeichnis enthaltene .log-Datei aus "C:\Dir1\tralala" nach "C:\Dir2\".
3. Beim Kopiervorgang soll die .log-Datei den Namen des Vergleichvorgangs aus 1. erhalten und soll von .log auf .txt umbenannt werden.
Der Quelltext mit dem ich rumexperimentiere, jedoch nix passiert:
for /R C:\Dir1\ %%I in (*.*) do (
for /R C:\Dir2\ %%J in (*.*) do (
IF .%%~nI%%~xI.==.%%~nJ%%~xJ. (
copy "%%I\*.log" "C:\Dir2\%%I.txt"
)))
Hat jemand Tipps oder könnte Ihn gar vervollständigen?
Vielen Dank.
Gruß,
Blattlaus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 276458
Url: https://administrator.de/forum/batch-verzeichnisnamen-mit-dateinamen-vergleichen-wenn-vorhanden-eine-log-datei-kopieren-und-zu-txt-276458.html
Ausgedruckt am: 27.04.2025 um 03:04 Uhr
9 Kommentare
Neuester Kommentar

Moin Blattlaus,
z.B. so
Gruß jodel32
z.B. so
@echo off
set "dir1=c:\dir1"
set "dir2=c:\dir2"
for /f "delims=" %%a in ('dir /b /ad "%dir1%"') DO @(
if exist "%dir2%\%%~nxa" copy "%dir1%\%%a\*.log" "%dir2%\%%~nxa.txt"
)

Was ist falsch daran?
Am Code selber nichts, denn er funktioniert einwandfrei. Ich gehe bei meinem Code davon aus das die Dateinamen in Verzeichnis Dir2 exakt den selben Namen wie das Verzeichnis in Dir1 haben. Oder haben die Dateien welche in Dir2 gesucht werden sollen Dateierweiterungen und nur der Name (ohne Erweiterung) soll gesucht werden ??Sollte das der Fall sein, ist die Zeile 5 folgendermaßen abzuändern:
if exist "%dir2%\%%~nxa.*" copy "%dir1%\%%a\*.log" "%dir2%\%%~nxa.txt"
Läuft hier einwandfrei, ansonsten hast du deine Frage nicht genau genug spezifiziert.

Nun fehlt lediglich noch, dass ein weiteres Verzeichnis von "C:\Dir1\tralala" nach "C:\Dir2\tralala " indem "Backup" im Unterverzeichnisnamen vorkommt kopiert wird.
Dein benötigter Schnippsel lautet:for /D %%b in ("%dir1%\%%a\*Backup*") DO @(
robocopy "%%b" "%dir2%\%%~nxa\%%~nxb" * /E
)
Statt Robocopy kannst du von mir aus auch xcopy nutzen wenn du willst, das ist Geschmackssache.
Schönen Sonntagabend noch
Gruß jodel

Zitat von @115129:
> Zitat von @114757:
danke für deine Antwort, funktioniert zwar, nur legt er die Kopien im Stammverzeichnis c:\dir2 ab und nicht im
dazugehörigen Verzeichnis c:\dir2\trallala.
ach sorry ist oben korrigiert...Asche auf mein Haupt.> Zitat von @114757:
danke für deine Antwort, funktioniert zwar, nur legt er die Kopien im Stammverzeichnis c:\dir2 ab und nicht im
dazugehörigen Verzeichnis c:\dir2\trallala.
Wärst du so nett und erklärst mir in kurzen und einfachen Worten, wie sich...
...zusammensetzt? Hierzu fehlt mir irgendwie der Zusammenhang.
%%~nxa ist der Name des Ordners (nach deinen Worten trallala)...zusammensetzt? Hierzu fehlt mir irgendwie der Zusammenhang.
%%~nxb ist der Name des Backup-Ordners
Die Info wie das mit der Pfadexpansion geht erhältst du mit einem
for /?
auf der Konsole, ganz am Ende wird das erläutert wie man einzelne Pfadbestandteile extrahiert.