115129
Goto Top

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:
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

Content-Key: 276458

Url: https://administrator.de/contentid/276458

Printed on: April 18, 2024 at 16:04 o'clock

Mitglied: 114757
114757 Jul 05, 2015 updated at 06:17:17 (UTC)
Goto Top
Moin Blattlaus,
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"  
)
Gruß jodel32
Mitglied: 115129
115129 Jul 05, 2015 updated at 09:43:26 (UTC)
Goto Top
Guten Morgen jodel32 und danke für deine rasche Antwort.

Habe deinen Quellcode getestet, leider passiert nichts.
@echo on
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"  
)
pause

Anbei was ausgegeben wird:

C:\Users\Administrator\Desktop>set "dir1=C:\_Dir1"

C:\Users\Administrator\Desktop>set "dir2=C:\_Dir2"

C:\Users\Administrator\Desktop>for /F "delims=" %a in ('dir /b /ad "C:\_Dir1"')
DO @(if exist "C:\_Dir2\%~nxa" copy "C:\_Dir1\%a\*.log" "C:\_Dir2\%~nxa.txt" )

C:\Users\Administrator\Desktop>pause
Drücken Sie eine beliebige Taste . . .


Was ist falsch daran?

Vielen Dank und Gruß,
Blattlaus
Mitglied: 114757
114757 Jul 05, 2015 updated at 10:21:29 (UTC)
Goto Top
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"
Dann wird nur nach dem Namen ohne Erweiterung gesucht.

Läuft hier einwandfrei, ansonsten hast du deine Frage nicht genau genug spezifiziert.
Mitglied: 115129
115129 Jul 05, 2015 at 10:39:17 (UTC)
Goto Top
Hallo jodel32,

entschuldige, es scheint als hätte ich die Frage nicht ausreichend formuliert, es lag tatsächlich an der von dir angedeuteten Dateierweiterung.

Habe folgendes versucht und es funktioniert:
@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"  
)
Exit


Wie müsste der Quellcode ohne größeren Aufwand umgeschrieben werden, damit der Ablauf wie folgt ausschaut (wäre optimaler bzw. komfortabler):
1. In "C:\Dir1\" enthaltene Verzeichnisnamen (ohne deren Unterverzeichnisse) vergleichen, ob in "C:\Dir2\" als Dateinamen (.*) vorhanden.
2. Wenn Datei in "C:\Dir2\" vorhanden, erstelle ein neues Verzeichnis unter "C:\Dir2\" mit dem Verzeichnisnamen, kopiere die Datei aus "C:\Dir2\" ins neue Verzeichnis und kopiere ein weiteres Verzeichnis indem "Backup" im Unterverzeichnisnamen vorkommt aus "C:\Dir1\" ins neue Verzeichnis "C:\Dir2"

Puh, hoffe das ist "verständlich" ausgedrückt ;)

Vielen Dank schon mal im voraus.

Gruß,
Blattlaus
Mitglied: 115129
115129 Jul 05, 2015 updated at 14:31:12 (UTC)
Goto Top
Wie müsste der Quellcode ohne größeren Aufwand umgeschrieben werden, damit der Ablauf wie folgt ausschaut
(wäre optimaler bzw. komfortabler):
1. In "C:\Dir1\" enthaltene Verzeichnisnamen (ohne deren Unterverzeichnisse) vergleichen, ob in "C:\Dir2\" als
Dateinamen (.*) vorhanden.
2. Wenn Datei in "C:\Dir2\" vorhanden, erstelle ein neues Verzeichnis unter "C:\Dir2\" mit dem
Verzeichnisnamen, kopiere die Datei aus "C:\Dir2\" ins neue Verzeichnis und kopiere ein weiteres Verzeichnis indem
"Backup" im Unterverzeichnisnamen vorkommt aus "C:\Dir1\" ins neue Verzeichnis "C:\Dir2"

Puh, hoffe das ist "verständlich" ausgedrückt ;)

Vielen Dank schon mal im voraus.

Gruß,
Blattlaus


Mit dem folgendem Quellcode erstellt mir die Batch-Datei immerhin schon mal die Verzeichnisse und kopiert mir die Dateien in "C:\_Dir2".
Nun fehlt lediglich noch, dass ein weiteres Verzeichnis von "C:\Dir1\tralala" nach "C:\Dir2\tralala " indem "Backup" im Unterverzeichnisnamen vorkommt kopiert wird.

set "dir1=C:\_Dir1"  
set "dir2=C:\_Dir2"  
for /f "delims=" %%a in ('dir /b /ad "%dir1%"') DO @(  
    if exist "%dir2%\%%~nxa.*" md "%dir2%\%%~nxa"  
	move "%dir2%\%%~nxa.*" "%dir2%\%%~nxa"  
)

Vielen Dank schon mal für Eure Hilfe.

Gruß,
Blattlaus
Mitglied: 114757
114757 Jul 05, 2015 updated at 18:15:51 (UTC)
Goto Top
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  
)
Die Einfügeposition solltest du jetzt selber herausfinden können, das lass ich dir noch als Hausaufgabe face-wink Soll hier ja etwas lernfördernden Character haben ...
Statt Robocopy kannst du von mir aus auch xcopy nutzen wenn du willst, das ist Geschmackssache.

Schönen Sonntagabend noch
Gruß jodel
Mitglied: 115129
115129 Jul 05, 2015 at 18:09:08 (UTC)
Goto Top
Zitat von @114757:

> 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%\%%~nxb" * /E  
> )
> 
Die Einfügeposition solltest du jetzt selber herausfinden können, das lass ich dir noch als Hausaufgabe face-wink Soll hier ja
etwas lernfördernden Character haben ...
Statt Robocopy kannst du von mir aus auch xcopy nutzen wenn du willst, das ist Geschmackssache.

Schönen Sonntagabend noch
Gruß jodel

Hallo Jodel,

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...

%%~nxa
und
%%~nxb

...zusammensetzt? Hierzu fehlt mir irgendwie der Zusammenhang.

Gruß,
Blattlaus
Mitglied: 114757
Solution 114757 Jul 05, 2015 updated at 18:47:21 (UTC)
Goto Top
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.
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)
%%~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.
Mitglied: 115129
115129 Jul 05, 2015 at 18:47:09 (UTC)
Goto Top
Vielen Dank für die Infos und die Hilfe, funktioniert nun wie gewünscht.

Wünsche noch einen schönen Restsonntag und eine warme Woche face-smile

Gruß,
Blattlaus