bergloewe82
Goto Top

Dateiumbenennung nach Namen Ihres Heimatordners

Ein freundliches Hallo hier im Forum!
Bin trotz Suche immer nur auf Teilergebnisse gestoßen die mich leider nicht weitergebracht haben.

Jetzt hoffe ich das Ihr mir hier helfen könnt.

Es geht wie der Titel schon sagt um ein Dateiumbenennungsproblem.

Ornder struktur sieht folgend aus:

Y:\.........\Anlagenfotos\Anlage\Motor\file1.jpg
in diesem "Anlage" Orndner liegen unterschiedlich viele Motor Ordner mit unterschiedlich vielen Bildern (benannt in Cameramanier).

Diese Files müssen nun den Ordnernamen + fortlaufende Nummerierung 00 erhalten.

Schön wäre wenn ein Script den angegebenen Ornder in der Struktur nach unten abarbeitet und allen gefundenen JPG Datein den Namen des "Fundortes + Nummer verpasst.


Ich hoffe ich hab mein Problem einigermaßen brauchbar geschildert und Ihr könnt mir Helfen.

Mein Dank ist euch sicher!


mfg
bergloewe

Content-Key: 148757

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

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: Biber
Biber 11.08.2010 um 09:47:48 Uhr
Goto Top
Moin bergloewe82,

willkommen im Forum.

Zur Sicherheit die Rückfrage:
Mit Ordnername "Fundort" meinst du im Beispiel "Y:\.........\Anlagenfotos\Anlage\Motor\file1.jpg" dann
  • einen neuen Dateinamen "Motor_0001.jpg"?
  • oder einen neuen Dateinamen "Anlage_Motor_0001.jpg"?

Sprich: sind vielleicht in der untersten Ordnerebene mehrere Parallel-Ordner, die z.B. "Sonstiges" heissen?

Grüße
Biber
Mitglied: bergloewe82
bergloewe82 11.08.2010 um 09:52:20 Uhr
Goto Top
Hallo Biber!

Nein Soll dann heißen Motor_01.jpg

Nein unterste ordnerebene ist "eindeutig"

lg
Mitglied: Biber
Biber 11.08.2010 um 10:27:34 Uhr
Goto Top
Moin bergloewe82,

das sollte mit einem Oneliner abgefackelt werden können.

Ich habe eben mal als proof-of-concept ein paar *.jpg in meinem Verzeichnis "Y:\Eigene Dateien\Download" angetestet:
[ die Zeile mit ">" am Anfang ist die abgefeuerte... das ">" NICHT mit eingeben, ist sich Prompt]
>for %v in ("y:\Eigene dateien\Download") do  @for /f "delims=" %i in ('Dir /b /s "%~v\*.jpg"') do @set /a "x+=1">nul & echo ren "%i" "%~nxv!x!%~xi"
ren "y:\Eigene dateien\Download\wp0000009ab707222064.jpg" "Download1.jpg"
ren "y:\Eigene dateien\Download\wp0000009ab70723b074.jpg" "Download2.jpg"

Übersetzung:
  • in einer äußeren FOR-Anweisung "for %v in ("y:\Eigene dateien\Download") do" wird das Verzeichnis angegeben, das durchgenudelt werden soll. die Laufvariable habe ich %v wie Verzeichnis genannt.
  • in einer weiteren (etwas mehr inneren) FOR/F-Anweisung werden mit dem "DIR /b /S"-Befehl alle "*.jpgs" dieses Verzeichnisses rangekarrt. Laufvariable ist %i... wie...ähh.. wie die Hauptschleifenvariable halt immer heisst. Jepp, "%i" wie "immer"
  • danach zähle ich eine (numerische) Variable x hoch, wenn sie nicht definiert war, wird ihr der Wert 0 unterstellt.
  • den Wert x=x+1 verwende ich als "Durchnumerator" für die neuen Dateinamen.
  • weil es ja nur ein proof-of-concept sein soll steht da "echo ren" statt "ren".
  • ach ja - bei mir brennt immer "DelayedExpansion".... im Batch musst du es setzen mit "Setlocal EnableDelayedExpansion"

So ungefähr wäre die Skizze...

Magst du mal die Anpassung der Skizze in einen paarzeiligen Batch versuchen und wir treffen uns wieder zur End-Abnahme hier?

Grüße
Biber
Mitglied: bergloewe82
bergloewe82 11.08.2010 um 12:36:11 Uhr
Goto Top
Hallo Biber!

Leider bin ich anscheinend zu doof das ganze zum Laufen zu kriegen.

Hab jetzt eine BAt mit folgendem inhalt:
for %v in ("D:\test jpg\") do @for /f "delims=" %i in ('Dir /b /s "%~v\*.jpg"') do @set /a "x=x+1">nul & ren "%i" "%~nxv!x!%~xi"

Das ganz wird auch anstantslos ausgeführt.
Nur leider OHNE Ergebniss.
Datein heißen danach gleich wie vorher.

Auch ist mir unklar wie die einzelnen Unterorner angesprochen werden.

In meinem Testfile Habe ich in D:\test jpg\ vier Ordner mit je 4 Dateien.

mfg & Danke für deine Mühe!
Mitglied: 77559
77559 11.08.2010 um 13:48:04 Uhr
Goto Top
Hallo Bergloewe,

ich vermute mal dir fehlt das von Biber erwähnte Setlocal EnableDelayedExpansion

Versuch mal dies (ungetestet)
::@echo off 
setlocal EnableDelayedExpansion
Set "Basis=Y:\...\Anlage"  
For /f "Delims=" %%A in (' Dir /B/AD "%Basis%" ') Do (  
  Set "Cnt=100"  
  PushD "%%A"  
  For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '   
    ) Do Set /A "Cnt+=1" & Echo Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg"  
  PopD
)

Gruß
LotPings

PS: Bei mir fängt -das Alphabet die Schleife mit A an face-wink
Edit: Wenn die Ausgabe (ob nun mit oder ohne @echo off) korrekt erscheint, das umbenennen in Zeile 8 "scharfmachen" indem das echo vor Ren entfernt wird
Mitglied: bergloewe82
bergloewe82 11.08.2010 um 14:08:49 Uhr
Goto Top
Leider selbes Ergebniss

Verarbeitung startet, dauert auch schon länger als mit dem ersten Versuch aber meine Datein schaun gleich aus wie vorher.

Getestet mit folgendem Code:
::@echo off 
setlocal EnableDelayedExpansion
Set "Basis=D:\test jpg\"  
For /f "Delims=" %%A in (' Dir /B/AD "%Basis%" ') Do (  
  Set "Cnt=100"  
  PushD "%%A"  
  For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '   
   ) Do Set /A "Cnt+=1" & Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg"  
  PopD
)
kommt 4 mal die Meldung (genausoviele Unterordner haben wir da) "Das System konnte den angegebenen Pfad nicht finden"

lg
bergloewe

[Edit Biber] Codeformatierung nachgezogen. [/Edit]
Mitglied: 77559
77559 11.08.2010 um 14:48:14 Uhr
Goto Top
Also bei mir klappt ein Test (Batch liegt im Basis-Verzeichnis):
>dir /S
 Verzeichnis von D:\Test\2010-08\11

2010-08-11  14:30    <DIR>          .
2010-08-11  14:30    <DIR>          ..
2010-08-11  14:26    <DIR>          motor
2010-08-11  14:32               287 ren-motor-pic.cmd
               4 Datei(en),            287 Bytes

 Verzeichnis von D:\Test\2010-08\11\motor

2010-08-11  14:26    <DIR>          .
2010-08-11  14:26    <DIR>          ..
2010-08-11  14:26                 3 test.jpg
2010-08-11  14:26                 3 testxyz.jpg
               2 Datei(en),              6 Bytes

     Anzahl der angezeigten Dateien:
               3 Datei(en),            293 Bytes
               5 Verzeichnis(se), 229.543.149.568 Bytes frei

>ren-motor-pic.cmd
Ren "D:\Test\2010-08\11\motor\test.jpg" "motor_01.jpg"
Ren "D:\Test\2010-08\11\motor\testxyz.jpg" "motor_02.jpg"
Drücken Sie eine beliebige Taste . . .

Du musst doch aber sehen können bei welchem Befehl (mit welchen Daten) die Fehlermeldung kommt?

Gruß
LotPings
Mitglied: pieh-ejdsch
pieh-ejdsch 11.08.2010 um 21:48:32 Uhr
Goto Top
Hi bergloewe,

liegt nur am ArbeitsPfad
Lot schrieb ja das die Batch im "Basis" Ornder lag

Zeile 03 und 04 Angepasst plus Zeile 11 und geht jetzt von egal woher
::@echo off 
setlocal EnableDelayedExpansion
pushD "D:\test jpg\"  
For /f "Delims=" %%A in (' Dir /B/AD ') Do (  
  Set "Cnt=100"  
  PushD "%%A"  
  For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '   
   ) Do Set /A "Cnt+=1" & Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg"  
  PopD
)
popD

Gruß Phil
Mitglied: bergloewe82
bergloewe82 12.08.2010 um 06:23:01 Uhr
Goto Top
Guten Morgen!!

Danke Pieh-Ejdsch! dein Batch funktoniert und macht jetzt das was es tun soll.

Eine kleine "Änderung" wäre noch schön!

Kann ich das Verzeichniss welches bearbeitet werden soll vorher abfragen?

Also son nach dem Muster: Welche Ornder sollen bearbeitet werden?

mfg & Herzlichen DANK

bergloewe
Mitglied: pieh-ejdsch
pieh-ejdsch 12.08.2010 um 11:40:32 Uhr
Goto Top
Moin bergloewe,
naja hat ja LotPings fast geschrieben

meinst Du sowas?
::@echo off 
setlocal EnableDelayedExpansion
pushD "D:\test jpg\"  
For /f "Delims=" %%A in (' Dir /B/AD ') Do (set "Antwort=N"  
  echo den unten angegebenen Ordner durcharbeiten ? [j] [n]
  set /p Anwort="%%A"  
  if /i "%Antwort%" == "j" (  
    Set "Cnt=100"  
    PushD "%%A"  
    For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '   
    ) Do Set /A "Cnt+=1" & Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg"  
    PopD
  )
)
popD

Gruß Phil
Mitglied: bergloewe82
bergloewe82 12.08.2010 um 11:54:31 Uhr
Goto Top
Hallo Phil

Nö meinte es anders. Die von dir beschriebene Version fragt bei jedem unterordner ob bearbeitet werden soll.

Schön wäre wenn ich nach Batch start den Ordner definieren kann in dem er alle Unterordner durcharbeitet.

Mit der jetzt (ja funktionierenden) Lösung muss nach jeder anlage das Patch an den neuen Pfad angepasst werden.
Für mich OKay
für meine Kollegen leider nicht!!

glg
Bergloewe
Mitglied: pieh-ejdsch
pieh-ejdsch 12.08.2010 um 12:15:06 Uhr
Goto Top
genau so wollte ich es erst schreiben aber dann hab ichs doch anders gemacht.

zum Ordner draufziehen auf den Batch oder seperate Eingabe

::@echo off 
setlocal EnableDelayedExpansion
if not "%~1" == "" (set Basis="%~1") else set /p Basis=Bitte den Pfad angeben in welchem die Ornder mit den enthaltenen Bildern sind  :  
if exist "%Basis%" (pushD "%Basis%") else goto :eof  
For /f "Delims=" %%A in (' Dir /B/AD ') Do (  
  Set "Cnt=100"  
  PushD "%%A"  
  For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '   
   ) Do Set /A "Cnt+=1" & Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg"  
  PopD
)
popD

Gruß Phil
Mitglied: bergloewe82
bergloewe82 12.08.2010 um 12:26:47 Uhr
Goto Top
Das wär genau das was ich mior wünschen würd!

Nur benennt er jetzt wieder nicht um!

Files schaun nachher gleich aus wie vorher.

lg
Bergloewe
Mitglied: Biber
Biber 12.08.2010 um 12:34:54 Uhr
Goto Top
Moin bergloewe82,

es hilft doch nur begrenzt weiter, wenn wir erfahren, dass "er sie jetzt wieder nicht umbenennt".

Bitte setz doch da, wo jetzt etwas passieren soll (z.B. "ren bla...") statt dessen oder zusätzlich ein "echo ren..." in den Schnipsel.
Oder zeig das aktuelle Verzeichnis an sinnvollen Stellen mit "echo %cd%" an. Usw. usw.

Und dann setz die Bildschirmausgabe in deinen nächsten Kommentar.

Grüße
Biber
Mitglied: pieh-ejdsch
pieh-ejdsch 12.08.2010 um 12:58:58 Uhr
Goto Top
naja ist ein bissel kompliziert.

ich gebs ja zu - Mein Fehler
im CDM-Line hatte ichs seperat getestet liegt wohl am Anführungszeichen

ersetzte Zeile 04
if exist "%Basis%" (pushD "%Basis%") else goto :eof

Edit
mit diesen Zeile
if not defined Basis goto :eof
if exist "%Basis:"=%" (pushD "%Basis:"=%") else goto :eof   

nun wirds Funktionieren
/Edit
Gruß Phil