frad
Goto Top

Datei per CMD umbenennen

Datei per CMD umbenennen und Teil des Ordnernamens übernehmen

Hallo,

ich möchte gerne erreichen, dass alle Dateien eines Ordners inkl. Unterordner in ein Ordner verschoben werden.

Beispiel IST

Ordnerstruktur

Hauptordner
->100 (Unterordner)
->200 (Unterordner)
->300 (Unterordner)
.
.
.

Unter den Unterordnern befinden sich mehrere PDF Dateien. Beispiel: meine.pdf

Nun soll das Ziel sein, alle PDF Dateien im Ordner "100" umzubenennen nach 100_meine.pdf ("Ordnername"_"ursprünglicherDateiname".pdf). Für die PDF-Dateien im Ordner "200" müsste die Umbennennung so aussehen "200_meine.pdf".

Beispiel SOLL

Hauptordner
->Reports (unterordner)

In dem Unterordner sollen nun alle umbenannten PDF Dateien liegen.

Ist dies mittels CMD machbar?

Viele Grüße

Content-Key: 139904

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: breppe
breppe Apr 06, 2010 at 08:27:47 (UTC)
Goto Top
Hallo,

das ist mittels CMD machbar.

Stichwort: Schleife und der Befehl MOVE.

Hier muss darauf geachtet werden, dass keine der Dateien in Benutzung ist.

Gruß
Member: FRAD
FRAD Apr 06, 2010 at 08:36:07 (UTC)
Goto Top
Hi,

hast du evtl. ein Beispiel, wie dies aussehen könnte -> Dateiumbenennung?

Grüße
Member: Biber
Biber Apr 06, 2010 at 08:43:27 (UTC)
Goto Top
Moin FRAD,

ein Beispiel mit angezeigtem Ergebnis am CMD-Prompt wäre:
>for /d %i in (F:\temp\?00) do @for %j in ("%i\*.*") do @echo Move "%j" "\temp\Reports\%~ni_%~nxj"  
Move "F:\temp\100\beispiel eins.pdf" "\temp\Reports\100_beispiel eins.pdf"  
Move "F:\temp\100\beispiel zwo.pdf" "\temp\Reports\100_beispiel zwo.pdf"  
Move "F:\temp\200\anderesbeispiel.pdf" "\temp\Reports\200_anderesbeispiel.pdf"  

Anmerkungen:
  • Mein Ordner "F:\temp" entspricht deinem "Hauptordner" und hat die Unterverzeichnisse "100" und "200"
  • Ich habe unterstellt, dass der neue Zielordner (bei mir "F:\temp\Reports") bereits angelegt wurde und habe ihn fest als Ziel angegeben.
  • Wenn das angezeigte Ergebnis bei dir auch sinnvoll aussieht, dann das "@echo" weglassen - dann wird tatsächlich verschoben.

Grüße
Biber
Member: FRAD
FRAD Apr 06, 2010 at 08:54:45 (UTC)
Goto Top
Hallo,

Danke! Habe mir eine Batchdatei gebastelt:

 
for /d %i in (D:\Batch\?00) do @for %j in ("%i\*.*") do Move "%j" "\Batch\Reports\%~ni_%~nxj"   
pause

Leider schließt sich die Datei einfach obwohl ich ein Pause am Ende gesetzt habe...

Habe auf d: einen Ordner "Batch" erstellt, darunter sind die Ordner "100" und "200" - und natürlich den Ordner "Reports".

Was würde passieren, wenn die Ordner 100 oder 200 auf einmal mit 2000 oder 3000 beginnen? In deiner Zeile steht "?00" müsste ich da noch etwas berücksichtigen?

Wäre super, wenn du mir kurz helfen könntest. Bekomme das Skript so nicht zum laufen...


EDIT:

In einem anderen Beitrag habe ich dieses Skript gefunden:
 
@echo off
FOR /F "delims=" %%a in ('dir /B /AD') do (  
pushd "%%i"  
call:verarbeite
popd
)
goto:eof

:verarbeite
FOR /F "delims=" %%i in ('dir /B /AD') do (  
  dir "%%i" /B /A-D >NUL 2>NUL && FOR /F "delims=" %%j in ('dir "%%i" /B /A-D') do move /-Y "%%i\%%j" "%%i%%~xj"  
  FOR /F "delims=" %%j in ('dir "%%i" /B /AD') do (  
    FOR /F "delims=" %%k in ('dir "%%i\%%j" /B /A-D') do move /-Y "%%i\%%j\%%k" "%%i.%%j%%~xk"  
  )
  rd /s /q "%%i"  
)
goto:eof

Wie kann ich in dem Skript verhindern, dass der Datei überschrieben wird? Ich möchte ja nur, dass der Ordnername vor dem eigentlich Dateinamen angehängt wird.
Member: Biber
Biber Apr 06, 2010 at 09:09:29 (UTC)
Goto Top
Moin FRAD,

ein "Batch-Skript" ist ein Hilfsmittel für wiederkehrende Aufgaben, beispielsweise für Kopier/Umbenams-Aktionen, die du 3x täglich oder jeden Donnerstag mittag machen musst.
Bei einer EINmaligen Aktion wie deiner "Ab heute will ich meine Ordnerstruktur übersichtlicher organisieren"-Klamotte - da brauchst du nur EINmal im Leben diese eine CMD-Zeile. Versuch diese lieber nachzuvollziehen (siehe Hilfe zu FOR /?) als sie unverstanden irgendwo auf dem Desktop doppelklickbar abzuspeichern.

Wenn und nachdem du diese CMD-Zeile verstanden hast kannst du sie gerne (inklusive des "@echo"s in eine Textdatei speichert und von dort aus (solltest du eine Variante davon jemals wieder brauchen) per Copy&Paste an den CMD-Prompt kopieren.

Zur Frage "Ordner heißen 1000 und 2000 statt 100 und 200": Dann die Wildcard-Maske anpassen von "\Hauptordner\?00" auf "\Hauptordner\?000".

Grüße
Biber
Member: FRAD
FRAD Apr 06, 2010 at 13:29:38 (UTC)
Goto Top
Mit diesem Skript funktioniert es:

@echo off
FOR /F "delims=" %%i in ('dir /B /AD') do (  
FOR /F "delims=" %%j in ('dir "%%i" /B /A-D') do move /-Y "%%i\%%j" "%%i.%date%.%%j"  
rd /s /q "%%i"  
)
pause