Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako da napravim Multi-rename tool

[es] :: Pascal / Delphi / Kylix :: Kako da napravim Multi-rename tool

[ Pregleda: 2805 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bobby100
Wien Austria

Član broj: 12701
Poruke: 9
*.5.11.vie.surfer.at

Sajt: www.malzilla.org


Profil

icon Kako da napravim Multi-rename tool20.05.2004. u 10:33 - pre 242 meseci
Pozdrav svima,

Mucim se vec izvesno vreme da napravim malo specifican Multi-rename tool, naime potrebna mi je rutina koja bi zalazila u sve subfoldere zadatog foldera (to je inace deo koji ne umem da uradim) i da mi preimenuje sve foldere u velika slova (uppercase) , a po zelji i imena fajlova (znaci opcija i za imena fajlova da budu uppercase).

Ako neko ima bilo kakav konstruktivan predlog za pravljenje rutine koja bi prosetala kroz sve subfoldere, molim vas pomagajte.

Unapred zahvalan
Spasic Boban
 
Odgovor na temu

neor
Nenad Orlovic

Član broj: 26828
Poruke: 74
*.panline.net



Profil

icon Re: Kako da napravim Multi-rename tool20.05.2004. u 13:38 - pre 242 meseci
Pogledaj u helpu primer za funkcije FindFirst i FindNext. Sa njima "setas" po direktorijumu. Kad naidjes na fajl koji ima atribut faDirectory onda rekurzivno udjes u taj folder (ne zaboravi da ignorises "." i ".." jer ces imati beskonacnu rekurziju)
 
Odgovor na temu

bobby100
Wien Austria

Član broj: 12701
Poruke: 9
*.5.11.vie.surfer.at

Sajt: www.malzilla.org


Profil

icon Re: Kako da napravim Multi-rename tool22.05.2004. u 00:36 - pre 242 meseci
Hvala svima, uspeo sam da odradim posao. Evo funkcija i procedura koje sam koristio:
Code:

procedure RenameDir(DirFrom, DirTo: string); 
var 
  shellinfo: TSHFileOpStruct; 
begin 
  with shellinfo do 
  begin 
    Wnd    := 0; 
    wFunc  := FO_RENAME; 
    pFrom  := PChar(DirFrom); 
    pTo    := PChar(DirTo);
    {fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
              FOF_SILENT or FOF_NOCONFIRMATION;}
    fFlags := FOF_ALLOWUNDO or
              FOF_SILENT or FOF_NOCONFIRMATION;
  end;
  SHFileOperation(shellinfo);
end;


function FindFiles(Directory: string; InclAttr, ExclAttr: Integer;
const SubDirs: Boolean; const Files: TStrings): Integer;
var
  SearchRec: TSearchRec;
begin
  Directory := IncludeTrailingPathDelimiter(Directory);
  FillChar(SearchRec, SizeOf(SearchRec), 0);
  if FindFirst(Directory + '*.*', faAnyFile, SearchRec) = 0 then
  begin
    try
      repeat
        if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
          if ((SearchRec.Attr and InclAttr > 0) or ((SearchRec.Attr = 0) and (InclAttr <> faDirectory))) and
               (SearchRec.Attr and ExclAttr = 0) then
          begin
            Files.Add(Directory + SearchRec.Name);
            if SubDirs then
              if SearchRec.Attr and faDirectory <> 0 then
                FindFiles(Directory + SearchRec.Name, InclAttr, ExclAttr, SubDirs, Files);
          end;
      until
        FindNext(SearchRec) <> 0;
    finally
      FindClose(SearchRec);
    end;
  end;
  Result := Files.Count;
end;

procedure Trenamer_form.Button1Click(Sender: TObject); // Find procedura
var
  sl: TStringList;
  include: integer;
  exclude: integer;
  subfolders: boolean;
  rootfolder: string;

begin
include := 0;
exclude := 0;
subfolders := false;
rootfolder := ShellTreeView1.path;
 if  checkbox1.Checked = true then
  begin
    Listbox1.Items.Add(rootfolder);
    include := faDirectory;
  end;
 if  checkbox2.Checked = true then include := include or faAnyFile;
 if  checkbox3.Checked = true then subfolders := true;
 if  checkbox3.Checked = false then exclude := faDirectory;
 sl := TStringList.Create;
  begin
    try
      FindFiles(rootfolder, include, exclude, subfolders, sl);
      Listbox1.Items.AddStrings(sl);
    finally
      sl.Free;
    end;
   end;
end;


procedure Trenamer_form.Button4Click(Sender: TObject); //name to uppercase
var
counter: integer;
begin
  counter := 0;
  while counter < (Listbox2.Items.Count) do
  begin
      RenameFile(Listbox1.Items.Strings[counter],(AnsiUpperCaseFileName(Listbox2.Items.Strings[counter])));
      RenameDir(Listbox1.Items.Strings[counter],(AnsiUpperCaseFileName(Listbox2.Items.Strings[counter])));
  counter := counter +1;
  end;
end;

Ovo zadnje je isto i za Lowercase, osim sto se koristi AnsiLowerCase();

Pozdrav svima, nadam se da ce ovo nekom koristiti
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Kako da napravim Multi-rename tool

[ Pregleda: 2805 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.