Kako da napravim Multi-rename tool

Kako da napravim Multi-rename tool

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

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 da i imena fajlova budu uppercase).

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



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 16 Jun 2003
  • Poruke: 240

Pogledaj si u Help-u za funkcije FindFirst, FindNext, FindClose.

Ako budes imao problema javi Smile



offline
  • Đuro Glumac
  • dipl. ing. informatike
  • Pridružio: 08 Feb 2004
  • Poruke: 3640
  • Gde živiš: ApAtIn

Imam neke samples programa koji sluzi za pretragu svih foldera i subfoldera al za menjenje imena u velika slova nemam nista a nemam ni ideju kako bi se to moglo izvesti. Ako nesto saznam javicu ti se.

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Ima funkcija iz SysUtils koja menja string u Uppercase, ima i za Lowercase( function AnsiUpperCaseFileName(const S: string): string; ). Posle toga bih samo iskoristio RenameFile iz SysUtils.
Problem mi je sada sto neznam dali da idem od fajla do fajla (i kako) ili da napunim jedan ListBox pomocu WinAPI funkcije kao ovde:
var s: string;
begin
s := 'c:\windows\*.bmp'#0;
ListBox1.Perform(LB_DIR, DDL_READWRITE, LongInt(@s[1]));
end;
pa da posle probam da to iskoristim...
Poradicu malo danas na ovome

offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

Hvala svima, uspeo sam da odradim posao. Evo funkcija i procedura koje sam koristio:
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.Button2Click(Sender: TObject); var counter: integer; begin   counter := 0;   while counter < (Listbox1.Count) do   begin   if listbox1.Selected[counter] then     begin     Listbox2.Items.Add(Listbox1.Items.Strings[counter]);     end;   counter := counter +1;   end;   Listbox2.Refresh; 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

Ko je trenutno na forumu
 

Ukupno su 835 korisnika na forumu :: 6 registrovanih, 1 sakriven i 828 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Koridor, naki011, Srle993, Sumadija34, voja64, zziko