Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Dateiumbenennung nach Namen Ihres Heimatordners

Frage Entwicklung Batch & Shell

Mitglied: bergloewe82

bergloewe82 (Level 1) - Jetzt verbinden

11.08.2010, aktualisiert 09:40 Uhr, 2623 Aufrufe, 15 Kommentare

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!



Mit freundlichen Grüßen
bergloewe
Mitglied: Biber
11.08.2010 um 09:47 Uhr
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
Bitte warten ..
Mitglied: bergloewe82
11.08.2010 um 09:52 Uhr
Hallo Biber!

Nein Soll dann heißen Motor_01.jpg

Nein unterste ordnerebene ist "eindeutig"

lg
Bitte warten ..
Mitglied: Biber
11.08.2010 um 10:27 Uhr
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
Bitte warten ..
Mitglied: bergloewe82
11.08.2010 um 12:36 Uhr
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.

Mit freundlichen Grüßen & Danke für deine Mühe!
Bitte warten ..
Mitglied: LotPings
11.08.2010 um 13:48 Uhr
Hallo Bergloewe,

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

Versuch mal dies (ungetestet)
01.
::@echo off  
02.
setlocal EnableDelayedExpansion 
03.
Set "Basis=Y:\...\Anlage" 
04.
For /f "Delims=" %%A in (' Dir /B/AD "%Basis%" ') Do ( 
05.
  Set "Cnt=100" 
06.
  PushD "%%A" 
07.
  For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '  
08.
    ) Do Set /A "Cnt+=1" & Echo Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg" 
09.
  PopD 
10.
)
Gruß
LotPings

PS: Bei mir fängt -das Alphabet die Schleife mit A an
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
Bitte warten ..
Mitglied: bergloewe82
11.08.2010 um 14:08 Uhr
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:
01.
::@echo off  
02.
setlocal EnableDelayedExpansion 
03.
Set "Basis=D:\test jpg\" 
04.
For /f "Delims=" %%A in (' Dir /B/AD "%Basis%" ') Do ( 
05.
  Set "Cnt=100" 
06.
  PushD "%%A" 
07.
  For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '  
08.
   ) Do Set /A "Cnt+=1" & Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg" 
09.
  PopD 
10.
)
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]
Bitte warten ..
Mitglied: LotPings
11.08.2010 um 14:48 Uhr
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
Bitte warten ..
Mitglied: pieh-ejdsch
11.08.2010 um 21:48 Uhr
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
01.
::@echo off  
02.
setlocal EnableDelayedExpansion 
03.
pushD "D:\test jpg\" 
04.
For /f "Delims=" %%A in (' Dir /B/AD ') Do ( 
05.
  Set "Cnt=100" 
06.
  PushD "%%A" 
07.
  For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '  
08.
   ) Do Set /A "Cnt+=1" & Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg" 
09.
  PopD 
10.
11.
popD
Gruß Phil
Bitte warten ..
Mitglied: bergloewe82
12.08.2010 um 06:23 Uhr
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?

Mit freundlichen Grüßen & Herzlichen DANK

bergloewe
Bitte warten ..
Mitglied: pieh-ejdsch
12.08.2010 um 11:40 Uhr
Moin bergloewe,
naja hat ja LotPings fast geschrieben

meinst Du sowas?
01.
::@echo off  
02.
setlocal EnableDelayedExpansion 
03.
pushD "D:\test jpg\" 
04.
For /f "Delims=" %%A in (' Dir /B/AD ') Do (set "Antwort=N" 
05.
  echo den unten angegebenen Ordner durcharbeiten ? [j] [n] 
06.
  set /p Anwort="%%A" 
07.
  if /i "%Antwort%" == "j" ( 
08.
    Set "Cnt=100" 
09.
    PushD "%%A" 
10.
    For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '  
11.
    ) Do Set /A "Cnt+=1" & Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg" 
12.
    PopD 
13.
14.
15.
popD
Gruß Phil
Bitte warten ..
Mitglied: bergloewe82
12.08.2010 um 11:54 Uhr
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
Bitte warten ..
Mitglied: pieh-ejdsch
12.08.2010 um 12:15 Uhr
genau so wollte ich es erst schreiben aber dann hab ichs doch anders gemacht.

zum Ordner draufziehen auf den Batch oder seperate Eingabe

01.
::@echo off  
02.
setlocal EnableDelayedExpansion 
03.
if not "%~1" == "" (set Basis="%~1") else set /p Basis=Bitte den Pfad angeben in welchem die Ornder mit den enthaltenen Bildern sind  : 
04.
if exist "%Basis%" (pushD "%Basis%") else goto :eof 
05.
For /f "Delims=" %%A in (' Dir /B/AD ') Do ( 
06.
  Set "Cnt=100" 
07.
  PushD "%%A" 
08.
  For /f "Delims=" %%B in ( 'Dir /B /A-D *.jpg '  
09.
   ) Do Set /A "Cnt+=1" & Ren "%%~B" "%%~nxA_!Cnt:~-2!.jpg" 
10.
  PopD 
11.
12.
popD
Gruß Phil
Bitte warten ..
Mitglied: bergloewe82
12.08.2010 um 12:26 Uhr
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
Bitte warten ..
Mitglied: Biber
12.08.2010 um 12:34 Uhr
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
Bitte warten ..
Mitglied: pieh-ejdsch
12.08.2010 um 12:58 Uhr
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
01.
if not defined Basis goto :eof 
02.
if exist "%Basis:"=%" (pushD "%Basis:"=%") else goto :eof 
nun wirds Funktionieren
/Edit
Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...