oomatrixoo
Goto Top

Dateien gleich Ordnernamen umbenennen (auch in allen Unterordnern)

Hallo.

Ich möchte in einem speziellen Ordner in ALLEN Unterordnern ALLE Dateien nach ihren Ordnernamen umbenennen.

Ich habe mir schon diese Version von bastla angesehen: Batch - Dateien mit Ordnernamen umbenennen

@echo off & setlocal 
FOR /F "delims=" %%i in ('dir /B /AD 2^>nul') do ( 
	FOR /F "delims=" %%j in ('dir "%%i" /B /A-D 2^>nul') do call:dorename "%%i" "%%~nj" "%%~xj" 
) 
goto:eof 

:dorename 
set "dirname=%~1" 
set "filename=%~2" 
set "fileext=%~3" 

set "endname=%dirname:.= %" 
set /a Ind=0 

:namecheck 
if not exist "%dirname%\%endname%%fileext%" goto :doit 
set /a Ind+=1 
set "endname=%dirname:.= %(%Ind%)" 
goto:namecheck 

:doit 
ren "%dirname%\%filename%%fileext%" "%endname%%fileext%" 
goto:eof


Dabei habe ich noch 2 Probleme:
1. Ich muss die .bat Datei in dem Ordner ablegen, wo ich auch die Dateien umbenennen möchte. Mein Ziel wäre es aber, die Datei zentral abzulegen. Es müsste also der Pfad zum Ordner mit den Dateien eingefügt werden.

2. Es wird nur auf erster Ordnerebene umbenannt. Ich möchte aber auch alle Unterordner mit einbeziehen.

Danke für eure Hilfe.

Mit freundlichen Grüßen

Content-Key: 245430

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

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: bastla
Lösung bastla 02.08.2014, aktualisiert am 03.08.2014 um 11:03:59 Uhr
Goto Top
Haloo OOmatrixOO!

Das könnte angepasst (und oberflächlich getestet) etwa so aussehen:
@echo on & setlocal
if [%1]== echo Kein Startordner angegeben! & pause & goto :eof

FOR /d /r "%~1" %%i in (*) do (  
    pushd "%%i"  
    FOR /F "delims=" %%j in ('dir /B /A-D 2^>nul') do call:dorename "%%~nxi" "%%~nj" "%%~xj"  
    popd
)
goto:eof

:dorename
set "dirname=%~1"  
set "filename=%~2"  
set "fileext=%~3"  

set "endname=%dirname:.= %"  
set /a Ind=0

:namecheck
if not exist "%endname%%fileext%" goto :doit  
set /a Ind+=1
set "endname=%dirname:.= %(%Ind%)"  
goto:namecheck

:doit
ren "%filename%%fileext%" "%endname%%fileext%"  
goto:eof
Grüße
bastla

P.S.: Wenn Du mehrere Zeilen Code postest, besser nicht type="plain", sondern nur verwenden ...
Mitglied: OOmatrixOO
OOmatrixOO 02.08.2014 um 21:01:47 Uhr
Goto Top
Hallo bastla,

ich stehe wohle gerade auf dem Schlauch. Wo muss ich denn den Startordner angeben?

MfG
Mitglied: bastla
Lösung bastla 02.08.2014, aktualisiert am 08.08.2014 um 17:33:39 Uhr
Goto Top
Hallo OOmatrixOO!

Der Batch erwartet den Startordner als Parameter beim Aufruf - so kannst Du jeden beliebigen Ordner bearbeiten, ohne den Code zu ändern.

Alternativ kannst Du die Zeile 2 entfernen und die Zeile 4 auf
FOR /d /r "D:\Dein spezieller Startordner" %%i in (*) do (
ändern.

Grüße
bastla
Mitglied: OOmatrixOO
OOmatrixOO 03.08.2014 um 11:03:51 Uhr
Goto Top
Manchmal hat man echt Tomaten auf den Augen und denkt nicht an das einfache.

Danke dir.
Mitglied: OOmatrixOO
OOmatrixOO 08.08.2014 um 17:31:21 Uhr
Goto Top
Hallo bastla.

Wie kann ich noch eine Bedingung mit einbauen? Also es soll der Ordner nicht bearbeitet werden, wenn sich darin eine Datei mit Endung .xyz befindet.
Mitglied: bastla
Lösung bastla 08.08.2014, aktualisiert am 03.12.2014 um 18:05:39 Uhr
Goto Top
Hallo OOmatrixOO!

Das könnte etwa so gehen:
FOR /d /r "D:\Dein spezieller Startordner" %%i in (*) do if not exist "%%~i\*.xyz" (  
    pushd "%%i"  
    FOR /F "delims=" %%j in ('dir /B /A-D 2^>nul') do call:dorename "%%~nxi" "%%~nj" "%%~xj"  
    popd
)
Grüße
bastla
Mitglied: hackyli
hackyli 08.08.2014 um 22:16:28 Uhr
Goto Top
Ich hätte ne Frage für ne Ergänzung für das Script.
Ich würde gerne nur bestimmte Dateiendungen umbennen (z.B. PDF-Dateien) und danach die umbenannten PDF Dateien in einen anderen Ordner verschieben.

Könnte mir da jemand dabei helfen?
Mitglied: bastla
bastla 08.08.2014 um 22:25:35 Uhr
Goto Top
Hallo hackyli (eine kurze Begrüßung Deinerseits wäre ja vielleicht auch drin gewesen)!
Ich würde gerne nur bestimmte Dateiendungen umbennen (z.B. PDF-Dateien)
Ändere die Zeile 6 auf
FOR /F "delims=" %%j in ('dir /B /A-D *.pdf 2^>nul') do call:dorename "%%~nxi" "%%~nj" "%%~xj"
und danach die umbenannten PDF Dateien in einen anderen Ordner verschieben.
Baue zwischen Zeile 6 und 7 etwas in der Art
move *.pdf "D:\Dein Ziel-Ordner\"
ein. Achtung: Wenn es im Zielordner (muss übrigens schon existieren) schon gleichnamige Dateien gibt, werden diese kommentarlos überschrieben ...

(Trotzdem) Grüße
bastla
Mitglied: hackyli
hackyli 09.08.2014 um 10:36:17 Uhr
Goto Top
Sorry. Vielen Dank für die Hilfe. War nicht böse gemeint face-wink

Hat wunderbar funktioniert.

Ein dickes HALLO von mir.
Mitglied: OOmatrixOO
OOmatrixOO 03.12.2014 um 18:15:14 Uhr
Goto Top
Hallo bastla,

deine Lösung läuft immer noch perfekt. face-wink
Ich habe dazu nun noch eine Frage.

Das ist die Batch Datei:
echo %Date% %Time% Dateien umbenennen:>>D:\Movies\Log\%date%.log
@echo on & setlocal 
FOR /d /r "D:\Movies" %%i in (*) do if not exist "%%~i\*.bak" (  
    pushd "%%i"   
    FOR /F "delims=" %%j in ('dir /B /A-D 2^>nul') do call:dorename "%%~nxi" "%%~nj" "%%~xj"  
    popd 
) 
goto:eof 

:dorename 
set "dirname=%~1"   
set "filename=%~2"   
set "fileext=%~3"   

set "endname=%dirname:.= %"   

set /a Ind=0 

:namecheck 
if not exist "%endname%%fileext%" goto :doit   
set /a Ind+=1 
set "endname=%dirname:.= %(%Ind%)"   
goto:namecheck 

:doit 
ren "%filename%%fileext%" "%endname%%fileext%" && echo "%filename%%fileext%" nach "%endname%%fileext%">>D:\Movies\Log\%date%.log  
goto:eof

Wie kann ich noch die Bedingung einfügen, dass zusätzlich der Ordner "D:\Movies\unbearbeitet" ignoriert wird?

MfG
Mitglied: bastla
bastla 03.12.2014 um 20:21:16 Uhr
Goto Top
Hallo OOmatrixOO!

Ungetestet etwa so:
echo %Date% %Time% Dateien umbenennen:>>D:\Movies\Log\%date%.log
@echo on & setlocal
FOR /d /r "D:\Movies" %%i in (*) do if not exist "%%~i\*.bak" (  
    if /i "%%~fi" neq "D:\Movies\unbearbeitet" (  
        pushd "%%i"  
        FOR /F "delims=" %%j in ('dir /B /A-D 2^>nul') do call:dorename "%%~nxi" "%%~nj" "%%~xj"  
        popd
    )
) 
goto:eof 

REM Rest wie gehabt
Falls auch Unterordner von "D:\Movies\unbearbeitet" ausgeschlossen werden sollen:
echo %Date% %Time% Dateien umbenennen:>>D:\Movies\Log\%date%.log
@echo on & setlocal
FOR /d /r "D:\Movies" %%i in (*) do if not exist "%%~i\*.bak" (  
    echo "%%~fi"|findstr /ivb "D:\Movies\unbearbeitet">nul && (  
        pushd "%%i"  
        FOR /F "delims=" %%j in ('dir /B /A-D 2^>nul') do call:dorename "%%~nxi" "%%~nj" "%%~xj"  
        popd
    )
) 
goto:eof 

REM Rest wie gehabt

Grüße
bastla
Mitglied: OOmatrixOO
OOmatrixOO 28.12.2014 um 21:09:48 Uhr
Goto Top
Zitat von @bastla:

Hallo OOmatrixOO!

Ungetestet etwa so:
echo %Date% %Time% Dateien umbenennen:>>D:\Movies\Log\%date%.log
> @echo on & setlocal
> FOR /d /r "D:\Movies" %%i in (*) do if not exist "%%~i\*.bak" (  
>     if /i "%%~fi" neq "D:\Movies\unbearbeitet" (  
>         pushd "%%i"  
>         FOR /F "delims=" %%j in ('dir /B /A-D 2^>nul') do call:dorename "%%~nxi"  
> "%%~nj" "%%~xj"  
>         popd
>     )
> ) 
> goto:eof 
> 
> REM Rest wie gehabt
> 
Falls auch Unterordner von "D:\Movies\unbearbeitet" ausgeschlossen werden sollen:
echo %Date% %Time% Dateien umbenennen:>>D:\Movies\Log\%date%.log
> @echo on & setlocal
> FOR /d /r "D:\Movies" %%i in (*) do if not exist "%%~i\*.bak" (  
>     echo "%%~fi"|findstr /ivb "D:\Movies\unbearbeitet">nul && (  
>         pushd "%%i"  
>         FOR /F "delims=" %%j in ('dir /B /A-D 2^>nul') do call:dorename "%%~nxi"  
> "%%~nj" "%%~xj"  
>         popd
>     )
> ) 
> goto:eof 
> 
> REM Rest wie gehabt
> 

Grüße


Hallo bastla,

Die 2. Variante, mit dem Ausschließen der Unterordner funktioniert leider nicht. Es werden trotzdem die Dateien mit umbenannt. Da auch, wenn die Datei direkt im Ordner "unbearbeitet" liegt.

Variante 1 funktioniert. Aber Variante 2 wäre natürlich besser. Kannst du mir da weiter helfen?

Mit freundlichen Grüßen
Mitglied: bastla
bastla 28.12.2014 um 23:52:18 Uhr
Goto Top
Hallo OOmatrixOO!

Sollte mit folgender Zeile 4 funktionieren:
echo "%%~fi"|findstr /iv "D:\Movies\unbearbeitet">nul && (
Grüße
bastla
Mitglied: OOmatrixOO
OOmatrixOO 29.12.2014 um 11:09:54 Uhr
Goto Top
Super, Danke das funktioniert.

MfG