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

Printed on: April 24, 2024 at 13:04 o'clock

Member: bastla
Solution bastla Aug 02, 2014, updated at Aug 03, 2014 at 09:03:59 (UTC)
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 ...
Member: OOmatrixOO
OOmatrixOO Aug 02, 2014 at 19:01:47 (UTC)
Goto Top
Hallo bastla,

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

MfG
Member: bastla
Solution bastla Aug 02, 2014, updated at Aug 08, 2014 at 15:33:39 (UTC)
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
Member: OOmatrixOO
OOmatrixOO Aug 03, 2014 at 09:03:51 (UTC)
Goto Top
Manchmal hat man echt Tomaten auf den Augen und denkt nicht an das einfache.

Danke dir.
Member: OOmatrixOO
OOmatrixOO Aug 08, 2014 at 15:31:21 (UTC)
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.
Member: bastla
Solution bastla Aug 08, 2014, updated at Dec 03, 2014 at 17:05:39 (UTC)
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
Member: hackyli
hackyli Aug 08, 2014 at 20:16:28 (UTC)
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?
Member: bastla
bastla Aug 08, 2014 at 20:25:35 (UTC)
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
Member: hackyli
hackyli Aug 09, 2014 at 08:36:17 (UTC)
Goto Top
Sorry. Vielen Dank für die Hilfe. War nicht böse gemeint face-wink

Hat wunderbar funktioniert.

Ein dickes HALLO von mir.
Member: OOmatrixOO
OOmatrixOO Dec 03, 2014 at 17:15:14 (UTC)
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
Member: bastla
bastla Dec 03, 2014 at 19:21:16 (UTC)
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
Member: OOmatrixOO
OOmatrixOO Dec 28, 2014 at 20:09:48 (UTC)
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
Member: bastla
bastla Dec 28, 2014 at 22:52:18 (UTC)
Goto Top
Hallo OOmatrixOO!

Sollte mit folgender Zeile 4 funktionieren:
echo "%%~fi"|findstr /iv "D:\Movies\unbearbeitet">nul && (
Grüße
bastla
Member: OOmatrixOO
OOmatrixOO Dec 29, 2014 at 10:09:54 (UTC)
Goto Top
Super, Danke das funktioniert.

MfG