WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Dateien variabel umbenennen

 

Don Iglos
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2015, 16:16     Titel: Dateien variabel umbenennen
  Antworten mit Zitat      
Moin Moin,

Ich habe 220 bmp-Dateien, die ich gerne intervallweise umbenennen möchte.
Die Dateien haben die Bezeichnung 01.bmp, 02.bmp, ..., 0220.bmp.

Ich möchte jetzt beispielsweise die ersten fünf Dateien umbenennen. Später möchte ich die Grenzen der for-Schleife auch noch Variabel gestalten. Dazu später mehr.
Dazu habe ich folgenden Code bisher geschrieben:

Code:

 for i=1:5
     dirData = dir(sprintf('0%d.bmp',i));         %# Get the selected file data
     fileNames = {dirData.name};     %# Create a cell array of file names
     for iFile = 1:numel(fileNames)  %# Loop over the file names
        newName = sprintf('%05d.bmp',iFile);  %# Make the new name
        movefile(fileNames{iFile},newName);        %# Rename the file
     end
 end
 


Ich weiß, dass meine dirData-struct und meine fileNames-Cell die falsche Größe haben und damit das Problem gelöst werden könnte. Ich bin aber momentan absolut überfordert damit die beiden Dinge so zu gestalten, wie sie sein müssten.

Der Code liest momentan die ersten fünf Elemente ein undbenennt dann den letzten (durch die for-Schleife) um in den gewünschten Namen für das erste Element. Ich hätte wie gesagt jetzt gerne, dass er die Dateien nacheinander umbenennt.

Das intervallweise umbenennen soll wie folgt aussehen.
Er soll mir die Dateien 01-05 zum Beispiel als 0101-0105 benennen und die Dateien 06-010 als 0201 bis 0205 usw... . Wenn das klappt wäre das optimal.

Ich denke, dass ich auf dem richtigen Weg bin, weiß aber grade nicht mehr weiter.

Ich würde mich über Hilfe sehr freuen.

Schonmal im Voraus besten Dank.

Grüße

Don Iglos
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.07.2015, 17:39     Titel:
  Antworten mit Zitat      
Hallo,

du willst eine Serie von Dateien umbenennen. Dann ergibt es doch keinen Sinn, zwei ineinandergeschachtelte for-Schleifen zu verwenden?
Ungetestete Idee:

Code:
dirData = dir('*.bmp');
for i = 1:numel(dirData) % oder for i = numel(dirData):-1:1; s.u.
oldFileName = dirData(i).name;
number = str2num(oldFileName(1:end-4));
series = floor(number/5);
numberInSeries = mod(number, 5);
newFileName = sprintf('im%02d%02d.bmp' , series, numberInSeries);
movefile(oldFileName, newFileName)
end


Vorsicht: wenn du das in der von dir angegebenen Reihenfolge machst, wird z.B. 09.bmp in 0204.bmp umbenannt. Dann hast du aber das 204. Bild der Serie überschrieben. Das dürfte vermieden werden, wenn du die Schleife rückwärts laufen lässt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Don Iglos
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2015, 21:24     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ich danke dir erstmal für die schnelle Antwort, ich war leider in letzter Zeit nicht in der Lage mich um die Sache zu kümmern.

Das Programm funktioniert ganz gut, du legst allerdings fest, dass es eine Serie von 5 Dateien sind, die du umbenennst.

Ich würde gerne genau das variabel gestalten:

Ich habe ein Array mit verschiedenen Werten gespeichert, die jeweils einen Anfangs- und einen Endwert für ein Intervall bilden.

Also B1=9, B2=18, B3=26... Je nachdem wie mein vorheriger Quellcode Maxima aus einem Histogramm bestimmt.

Jetzt soll das erste Intervall von B1 bis B2 gehen. Das zweite von B2 bis B3 usw.
Ich denke man kann das über die "length" Funktion regeln, bin mir aber nicht sicher wie das aussehen soll.

Ich habe es folgendermaßen versucht;

Code:

   for i=1:n
     evalc(sprintf('B%d = B(i)', i));%Speichern der Maxima in Variablen-->for-Schleife    
         

     
     
for p=length(B(i):B(i+1))
dirData=dir('*.bmp');
for i = numel(dirData):-1:1;
oldFileName = dirData(i).name;
number = str2num(oldFileName(1:end-4));
series = floor(number/p);
numberInSeries = mod(number, p);
newFileName = sprintf('im%03d%03d.bmp' , series, numberInSeries);
movefile(oldFileName, newFileName)
end
end
   end

 

Ich bekomme dadurch aber die Meldung:

Error using movefile.
Cannot copy or move file or directory onto itself.

Error:
movefile(oldFileName, newFileName).

Bin ich denn prinzipiell auf dem richtigen Weg oder komplett auf dem Holpfad?
Ich schätze mal, dass die Meldung dadurch zu Stande kommt, dass ich B2 als Anfangs- und Endpunkt nutzen möchte und Matlab da was dagegen hat. Vielleicht würde es mehr Sinn machen, statt movefile copyfile zu nutzen und im Nachhinein die alten Bezeichnungen zu löschen?

Danke schonmal für die Antworten.

LG

Don Iglos
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.07.2015, 22:04     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:

Das Programm funktioniert ganz gut, du legst allerdings fest, dass es eine Serie von 5 Dateien sind, die du umbenennst.

Jep, weil deine Fragestellung so lautete.

Code:
evalc(sprintf('B%d = B(i)', i))

Das sieht sehr gruselig aus.

Zitat:
Error using movefile.
Cannot copy or move file or directory onto itself.

Mal den Debugger genutzt, um sich die Dateinamen zum problematischen Zeitpunkt anzusehen?

Zitat:
Jetzt soll das erste Intervall von B1 bis B2 gehen. Das zweite von B2 bis B3 usw.

Und B2 soll nun im ersten Intervall, im zweiten, oder in beiden eingeschlossen sein?

So oder so: find e heraus, welches das letzte B(i) ist, das kleiner als number ist. Dann hast du das richtige series .

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 23.07.2015, 16:06     Titel:
  Antworten mit Zitat      
ich hab das jetzt nicht nachvollzogen, aber wenn du ein DOS zu Grunde liegen hast gibt's noch
Code:
(als DOS-Befehl)
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Don Iglos
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2015, 00:35     Titel:
  Antworten mit Zitat      
Moin,

die Methode, die mir Harald vorgeschlagen hatte, läuft perfekt. Ich hatte bisher leider nur noch nicht die Zeit den Thread zu beenden.

Danke an alle für die Bemühungen, es hat mir sehr geholfen.

LG

Don Iglos
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.