sarahl
Goto Top

Batch - Dateinamen mit Nutzereingabe in mehreren Ordnern ändern

Guten Morgen alle zusammen,
ich stöbere schon seit mehreren Tagen in diesem Forum und treffe auf ganz ähnliche Probleme, wie ich sie zur Zeit habe. Ich habe schon selbst probiert eine Batch-Datei zu basteln, aber bislang schaff ich es nicht, dass der gewünschte Job erledigt wird. Hoffentlich könnt ihr mir weiterhelfen....

Zum eigentlichen Problem:
Ich habe vier verschiedene Ordner mit Dateien (pdf, doc, jpg, bmp, tiff)
die alle einen ähnlichen Aufbau haben:
eine acht-stellige Artikelnummer und ggf. noch einen Rest.
Bsp:
c:\bilder\45698234_Artikelfoto.jpg
c:\angebote\45698234 Angebot Firma_X.pdf
d:\katalog\45698234.jpg
usw...

(Insgesamt handelt es sich um ca. 25000 Dateien)

Viele Artikelnummern müssen nun durch eine neue achtstellige
Artikelnummern ersetzt werden, leider ohne ein bestimmtes System.
Deshalb suche ich nach eine Lösung die ungefähr so aussieht:

Benutzer gibt die alte Artikelnummer ein und
Dateien, welcher mit der alten Artikelnummer beginnen, werden in den vier Ordnern
gesucht, die ersten 8 Stellen des Dateinamens abgeschnitten
und anschliessend durch neue (durch den Nutzer einzugebende) 8 Ziffern ersetzt.
Der Rest des Dateinamens und die Endung soll beibehalten werden.

Ich freue mich auf eure Antworten
Falls ich meinen ersten Entwurf posten soll, bitte Bescheid geben.

Liebe Grüße

Sarah
Kommentar vom Moderator Biber am Aug 02, 2012 um 15:47:34 Uhr
Zitat von @SarahL:
Beim Umbennen werden nur die ersten 8 Ziffern angezeigt ...
Set /a rgc +=1
#841

Content-Key: 188993

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

Printed on: April 25, 2024 at 15:04 o'clock

Member: bastla
bastla Aug 02, 2012 at 10:36:21 (UTC)
Goto Top
Hallo SarahL und willkommen im Forum!
Falls ich meinen ersten Entwurf posten soll, bitte Bescheid geben.
Immer her damit ... face-wink

Grüße
bastla
Member: SarahL
SarahL Aug 02, 2012 updated at 12:37:21 (UTC)
Goto Top
Hi, super dass du dich meldest face-smile

Also soweit bin ich jetzt mit Schnippseln aus dem Forum gekommen,
wobei sich der Sinn vieler Sachen mir noch nicht erschließt:

@echo off & setlocal enabledelayedexpansion
echo Alte Artikelnummer eingeben:
set /p altenr=
echo Neue Artikelnummer eingeben:
set /p neuenr=

set "OrdnerTech=C:\Users\xxx\xxx\"  
set /a Stellen=8

if exist %OrdnerTech%\%altenr%*.* GOTO vorhanden
:vorhanden

for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerTech%\%altenr%*.*"') do (  
    set "Name=%%~ni"  
    echo ren "%%i" "!Name:~,%Stellen%!%%~xi"  
)

Noch nicht eingepflegt ist die neue Artikelnummer... ich weiss nicht wo die genau hin muss.
Jetzt würde hier der :vorhanden - Schritt 4 mal wiederholt, für jeden Ordner in den
geschaut werden muss, ob eine Datei vorhanden ist.
Was ich noch vergessen habe:
Bei 2 von den 4 Ordnern muss die Datei oder die Dateien in ein anderes Verzeichnis verschoben werden.
Member: bastla
bastla Aug 02, 2012 at 12:23:16 (UTC)
Goto Top
Hallo SarahL!

Als Anhaltspunkt: Wenn 8 Stellen am Anfang eines Dateinamens wieder durch genau 8 Stellen ersetzt werden sollen, geht das direkt mit einem "ren":
for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerTech%\%altenr%*.*"') do ren "%OrdnerTech%\%%i" "%neuenr%*.*"
Grüße
bastla

P.S.: "Code"-Formatierung ist hier beschrieben ...
Member: SarahL
SarahL Aug 02, 2012 at 13:51:33 (UTC)
Goto Top
Vielen Dank für deine schnelle Antwort.
Bin ein Stückchen weiter, jedoch gibt es noch nicht das gewünschte Ergebnis.

So sieht das Script (soll als .bat laufen) momentan aus:

@echo off & setlocal enabledelayedexpansion
:eingabeneu
echo Alte Artikelnummer eingeben:
set /p altenr=
echo die ALTE Nummer lautet: %altenr%
echo NEUE Artikelnummer eingeben:
set /p neuenr=
echo die NEUE Nummer lautet: %neuenr%
echo Sind diese Angaben korrekt? ( j / n )
set /p antwort=
if "ant"=="n" GOTO eingabeneu else GOTO umbennen  
:umbennen

set "OrdnerTech=S:\xxx\TechnischeDokumente"  
set "OrdnerBild=S:\xxx\xxx\Bild"  
set "OrdnerAng=S:\xxx\Angebote"  
set "OrdnerKat=X:\xxx\Katalog"  
set "OrdnerKatneu=X:\xxx\Katalogneu"  

for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerTech%\%altenr%*.*"') do echo ren "%OrdnerTech%\%%i" "%neuenr%*.*"  
for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerBild%\%altenr%*.*"') do echo ren "%OrdnerBild%\%%i" "%neuenr%*.*"  
for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerAng%\%altenr%*.*"') do echo ren "%OrdnerAng%\%%i" "%neuenr%*.*"  
for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerKatneu%\%altenr%*.*"') do echo move "%OrdnerKatneu%\%%i" ""%OrdnerKatneu%%neuenr%*.*"  

pause
exit

Habe erstmal noch die Echos reingebastelt, bevor das ganze ausprobiere...

Das Ergebniss sieht leider so aus, dass der Pfad doppel angezeigt wird, also S:\xxx\TechnischeDokumente.123456789.jpgS:\xxx\TechnischeDokumente123456789.jpg
Beim Umbennen werden nur die ersten 8 Ziffern angezeigt und nicht die Endung, also _Angebot, etc. was noch dahinter geschrieben werden muss.
Aber ich spüre schonmal, dass die Lösung nicht mehr weit weg sein kann face-wink

Viele Grüße

Sarah
Member: bastla
bastla Aug 02, 2012 updated at 15:14:31 (UTC)
Goto Top
Hallo SarahL!
Das Ergebniss sieht leider so aus, dass der Pfad doppel angezeigt wird
Sorry - das habe ich auch übersehen: Da Du ja "dir /s/b" verwendest, bekommst Du bereits vollständige Pfade geliefert, sodass das nochmalige Angeben des Ordners nicht nötig ist - daher einfach: ren "%%i" ...
Beim Umbennen werden nur die ersten 8 Ziffern angezeigt und nicht die Endung, also _Angebot, etc. was noch dahinter geschrieben werden muss.
Per "echo" lässt sich das leider auch nicht simulieren - Du kannst aber einfach mit
ren S:\xxx\Angebote\12345678_Angebot.doc 87654321*.*
durch Direkteingabe in CMD testen ...
Deine Zeile 23 ist mir allerdings nicht ganz klar - ist das eher so gemeint?
for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerKat%\%altenr%*.*"') do (  
    echo move "%%i" "%OrdnerKatneu%\"  
    echo ren "%OrdnerKatneu%\%%~nxi" "%neuenr%*.*"  
)
Grüße
bastla
Member: SarahL
SarahL Aug 29, 2012 at 10:55:48 (UTC)
Goto Top
Hallo nochmal,

ich wollte mich nochmal zurückmelden und habe eure Hilfe nicht vergessen face-smile.
Vielen Dank für die Tips.

Das fertige Script sieht nun so aus:

@echo off & setlocal enabledelayedexpansion
echo Alte Artikelnummer eingeben:
set /p altenr=
echo NEUE Artikelnummer eingeben:
set /p neuenr=

set "OrdnerTech=S:\xxx\xxx\xxx\TechnischeDokumente"
set "OrdnerBild=S:\xxx\xxx\xxxxx\asdf"
set "OrdnerAng=S:\xxx\xxx\Angebote"
set "OrdnerKat=X:\xxxxx\xxxxx\Bilder"
set "OrdnerKatneu=X:\xxxx\xxxx\Bilder\neu"

for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerTech%\%altenr%*.*"') do ren "%%i" "%neuenr%*.*"
for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerBild%\%altenr%*.*"') do ren "%%i" "%neuenr%*.*"
for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerAng%\%altenr%*.*"') do ren "%%i" "%neuenr%*.*"
for /f "delims=" %%i in ('dir /s/b/a-d "%OrdnerKat%\%altenr%*.*"') do (
    xcopy "%%i" "%OrdnerKatneu%\"
    ren "%OrdnerKatneu%\%%~nxi" "%neuenr%*.*"
)
pause
exit


Alles funktioniert einwandfrei und erspart meinen Kollegen und mir eine Menge Arbeit.

Liebe Grüße

Sarah