我在一个文件夹中有数百个子目录,子目录中有数百个子文件夹。我想检查子文件夹名称是否包含'(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
你能帮帮我吗?
非常感谢。
答案 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)
您需要进行递归目录搜索才能找到所有文件夹。并从下往上重命名它们。