kintarooe
Goto Top

Wie kann ich mit einer .bat Datei die Namen verschiedener Dateien austauschen?

OS: Windows XP 32 bit
Batch-Neuling face-wink

Hallo,

ich stehe vor folgendem Problem
In einem Ordner liegen z.B. 3 Dateien mit den Namen:

slide1.jpg
slide2.jpg
slide3.jpg

Außerdem ein Verzeichnis namens "old".
Dort befinden sich ebenfalls 3 Dateien mit kryptischen Namen, z.B.:

1_1_f09f7f84i3n.jpg
1_2_p9r1z5b8c2.jpg
2_1_q1v9h3j7k6.jpg

Nun möchte ich die Dateien vom Hauptordner (slide1.jpg, ...) in die Dateien aus dem "old" Ordner umbenennen (slide1.jpg soll 1_1_f09f7f84i3n.jpg heißen, usw.).

Am liebsten wäre mir eine .bat Datei die das automatisch macht.

Mein Lösungsansatz:
Die Dateinamen in zwei Textdateien schreiben

Code:

@echo off
dir *.jpg /b >rename.txt
dir old /b >original.txt

und anschließend umbenennen... und hier ist auch das Problem:

FOR /F %%i in (rename.txt) do (
FOR /F %%j in (original.txt) do (
SET FILES=%FILES% %%j
echo %%j

)

echo ren %%i
)

Ich müsste irgendwie die Variable %%j speichern können um sie unten ans %%i anzuhängen...aber das funktioniert nicht. Habt ihr eine Idee?

Content-Key: 133567

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

Printed on: April 27, 2024 at 00:04 o'clock

Member: bastla
bastla Jan 15, 2010 at 14:50:50 (UTC)
Goto Top
Hallo KintaroOe und willkommen im Forum!

Unter der Voraussetzung, dass sich im "old"-Verzeichnis mindestens so viele Dateien wie im Hauptverzeichnis befinden und die Zuordnung anhand der alphabetischen Sortierung erfolgen kann, etwa so:
@echo off & setlocal
set "Hauptordner=D:\Haupt"  
set "Unterordner=D:\Haupt\old"  
set "Typ=jpg"  

set "Liste=%temp%\Namensliste_old.txt"  
dir /b /a-d /on "%Unterordner%\*.%Typ%" 2>nul|findstr /n "^">"%Liste%"  

pushd "%Hauptordner%"  
for /f "tokens=1* delims=:" %%i in ('dir /b /a-d /on "%Hauptordner%\*.%Typ%" 2^>nul^|findstr /n "^"') do (  
    for /f "tokens=1* delims=:" %%a in ('findstr /b "%%i:" "%Liste%"') do if "%%b" neq "" echo ren "%%j" "%%b"  
)
popd
del "%Liste%"  
pause
Wegen des "echo" vor dem "ren" wird die Umbenennung (zum Testen) erst einmal nur angezeigt - wenn das Ergebnis vernünftig aussieht, dieses "echo" (und "pause" am Ende) einfach entfernen ...

Grüße
bastla
Member: KintaroOe
KintaroOe Jan 15, 2010 at 15:11:46 (UTC)
Goto Top
das funktioniert super, danke!

Allerdings darf ich keine absoluten Pfade verwenden, geht das auch mit relativen? Einzig der "old" Ordner ist immer im Verzeichnis der .bat Datei.

grüße
kintaro

EDIT:

jetzt funktioniert es:

@echo off & setlocal
set "Unterordner=org"
set "Typ=jpg"

set "Liste=%temp%\original.txt"
dir /b /a-d /on "%Unterordner%\*.%Typ%" 2>nul|findstr /n "^">"%Liste%"

for /f "tokens=1* delims=:" %%i in ('dir /b /a-d /on "*.%Typ%" 2^>nul^|findstr /n "^"') do (
for /f "tokens=1* delims=:" %%a in ('findstr /b "%%i:" "%Liste%"') do if "%%b" neq "" ren "%%j" "%%b"
)
popd
del "%Liste%"
pause


--

nochmal danke =)