rename script



  • Hallo,
    ich will ein Umbenenn Script schreiben, das zb bei einer MP3 Interpret und Titel vertauscht, die Umbenennung soll erfolgen wenn man eine Datei mit diesem Programm ausführt, zB:
    "Abba - Waterloo.mp3" soll in "Waterloo - Abba.mp3" umbenannt werden.

    Ich kenne mich nicht so gut in C++ aus (bin PHP Progger und hab mal in Java reingeschnuppert), deswegen brauche ich bitte eure Hilfe !

    Hier das was ich schon zusammengeschnipselt habe :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[]) {
       char newstr[100];
       char *ptr1,*ptr2;
    
       ptr1 = strtok(argv[1], "-");
       ptr2 = strtok(NULL, "-");
    
       if( (rename(argv[1],newstr)) < 0) {
          fprintf(stderr, "Fehler beim Umbenennen von %s", argv[1]);
          return EXIT_FAILURE;
       }
       return EXIT_SUCCESS;
    }
    

    Die Datei : C:\....\Musik\Waterloo - Abba.mp3

    So jetzt habe ich in ptr1 den Pfad und den Anfang der MP3 "C:\....\Musik\Abba" und in ptr2 " Waterloo.mp3", jetzt will ich einmal den Pfad und bei Waterloo das ".mp3" rausschneiden, damit ich "Abba " und " Waterloo" umdrehen kann und am Ende soll die Datei dann "C:\....\Musik\Waterl oo - Abba.mp3" heissen.

    Dann brauche ich die Datei nur noch mit diesem Programm zu öffnen und es wird automatisch umgedreht, wäre euch sehr dankbar wenn ihr mir dabei helfen könntet, und wenn das geschafft ist würde ich es gern noch erweitert, und zwar dass man auch mehrere Dateien selektieren kann und diese dann alle umgedreht werden.

    Danke schonmal im voraus

    mfg

    aias¿



  • Du arbeitest soweit ich das sehe mit C und nicht mit C++. Inkludiere vielleicht mal <string> (statt string.h)

    Danach brauchst du dann auch nicht mehr mit char* zu arbeiten sondern kannst auf std::string umsteigen. Dieser bezitzt eine find Funktion ( s.find("irgendwas") ) mit dem du dann (z.B) deinen ., dein - oder was auch imemr suchen kannst und dann mit der substr Funktion (z.B) kopieren kannst.

    Naeheres sollte in der FAQ und auf www.cppreference.com zu finden sein.

    Wird sich aber bestimmt noch einer der Profis (resp Nicht-Anfaenger) dazu aeussern.



  • So habs geschafft, jetzt will ich es nur noch hinbekommen das ich mehrere Dateien markieren kann und gleichzeitig umbennen lassen, ich hab ganz google durchforstet und nich gefunden wie das geht :(, die anzahl der Argumente bleibt immer gleich, auch wenn ich mehrere DAteien markiere.

    /* a_renamer.c */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[]) {
    
      string oldname,newname;
      string::size_type stpath,stdivide,stending;
      string path,first,second,ending;
      string::iterator i;
    
      //int y;
      //for(y=0;y<argc;y++) {
    	  oldname = argv[1];
    	  stpath = oldname.find_last_of("\\");
    	  stdivide = oldname.find_last_of("-");
    	  stending = oldname.find_last_of(".");
    
    	  path = oldname.substr(0,stpath+1);
    	  first = oldname.substr(stpath+1,stdivide-stpath-1);
    	  second = oldname.substr(stdivide+1,stending-stdivide-1);
    	  ending = oldname.substr(stending,string::npos);
    
    	  for(i=first.end()-1;i!=first.begin();i--) {
    		  if(*i==' ') {
    			first.erase(i);
    		  }else{
    			  break;
    		  }
    	  }
    	  i=second.begin();
    	  while(*i==' ') {
    		second.erase(i);
    	  }
    	  newname = path+second+" - "+first+ending;
    	  rename(oldname.c_str(),newname.c_str());
    
      //}
    
    	return EXIT_SUCCESS;
    }
    

Anmelden zum Antworten