如何在delphi中重命名批处理子目录?

时间:2012-01-13 16:00:34

标签: delphi

我在一个文件夹中有数百个子目录,子目录中有数百个子文件夹。我想检查子文件夹名称是否包含'(number)',如果子文件夹包含它,我想在'(number)'前面加上子文件夹名称:例如:

rootfolder
       --- subfolder1
                 ---subfolder11(100082)
                        --- file1.txt
        --- subfolder2(100083)
                  ---subfolder22(100085)
                         --- file2.txt 
                         --- subfolder222
                                     ---subfolder2222(80001)
                                                        ---file3.txt

我希望:

rootfolder
       --- subfolder1
                 ---(100082)subfolder11
                        --- file1.txt
        --- (100083)subfolder2
                  ---(100085)subfolder22
                         --- file2.txt 
                         --- subfolder222
                                    --- (80001)subfolder2222
                                                        --- file3.txt
你能帮帮我吗? 非常感谢。

3 个答案:

答案 0 :(得分:3)

嗯,作为一个例子,这是我的提取文件,它对文件夹树做了令人讨厌的事情 - 它没有重命名它们,它会破坏它们:

procedure splatDirectory(const dirSpec:string);
var searchRec:TsearchRec;
    searchResult:integer;
begin
  searchResult:=findFirst(dirSpec+'\*.*',faDirectory,searchRec);
  try
    while (0=searchResult) do
    begin
      if ((searchRec.attr and faDirectory)>0) then
      begin
        if (searchRec.name<>'.') and (searchRec.name<>'..') then
          splatDirectory(dirSpec+'\'+searchRec.Name)
      end
      else
        deleteFile(dirSpec+'\'+searchRec.Name);
      searchResult:=findNext(searchRec);
    end;
  finally
    findClose(searchRec);
  end;
  removeDir(dirSpec);
end;

这确实有效 - 从工作代码中复制。

答案 1 :(得分:2)

以下是重命名子目录的代码,可根据您的需要对其进行自定义:

procedure ProcessDir(const DirName: string);
var
  Path, NextDir: string;
  F: TSearchRec;

begin
  Path:= DirName + '/*.*';
  if FindFirst(Path, faAnyFile, F) = 0 then begin
    try
      repeat
        if (F.Attr and faDirectory <> 0) then begin
          if (F.Name <> '.') and (F.Name <> '..') then begin
            NextDir:= DirName + '/' + F.Name;
            ProcessDir(NextDir);
// generate new folder name here, next line just for testing
            RenameFile(NextDir, NextDir + '_Renamed');
          end;
        end;
      until FindNext(F) <> 0;
    finally
      FindClose(F);
    end;
  end;
end;

答案 2 :(得分:1)

您需要进行递归目录搜索才能找到所有文件夹。并从下往上重命名它们。