文件夹批量改名,代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
sr : TSearchRec;
const
s = 'c:\gyj\'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。
begin
if DirectoryExists(s) then
begin
if FindFirst(s+'*.*', faDirectory , sr) = 0 then
begin
repeat
if (sr.Attr and faDirectory ) = sr.Attr then
begin
if (sr.Name<>'.') and (sr.Name<>'..') then
begin
//FileSetAttr(s+sr.Name,faArchive);
RenameFile(s+sr.Name,s+'SH-'+ sr.Name );
end;
end;
until FindNext(sr) <> 0
end;
FindClose(sr);
end;
end;我在c:\gyj\文件夹下放两个文件夹22-85、22-86,结果没有问题,正常修改成SH-22-85、SH-22-86但是放两个文件夹22-85A、22-86A,结果是SH-SH-22-85A、SH-SH-22-86A,设置断点,单步调试,发现FindNext把没有改名以前的文件夹遍历后,又重新遍历RenameFile后的文件夹,谁能解释这两种情况有什么区别,先谢谢!先给100,分不够再加。
var
sr : TSearchRec;
const
s = 'c:\gyj\'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。
begin
if DirectoryExists(s) then
begin
if FindFirst(s+'*.*', faDirectory , sr) = 0 then
begin
repeat
if (sr.Attr and faDirectory ) = sr.Attr then
begin
if (sr.Name<>'.') and (sr.Name<>'..') then
begin
//FileSetAttr(s+sr.Name,faArchive);
RenameFile(s+sr.Name,s+'SH-'+ sr.Name );
end;
end;
until FindNext(sr) <> 0
end;
FindClose(sr);
end;
end;我在c:\gyj\文件夹下放两个文件夹22-85、22-86,结果没有问题,正常修改成SH-22-85、SH-22-86但是放两个文件夹22-85A、22-86A,结果是SH-SH-22-85A、SH-SH-22-86A,设置断点,单步调试,发现FindNext把没有改名以前的文件夹遍历后,又重新遍历RenameFile后的文件夹,谁能解释这两种情况有什么区别,先谢谢!先给100,分不够再加。
var
sr : TSearchRec;
const
s = 'D:\EBook\1\'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。
begin
if DirectoryExists(s) then
begin
if FindFirst(s+'*.*', faDirectory , sr) = 0 then
begin
repeat
if (sr.Attr and faDirectory ) = sr.Attr then
begin
if (sr.Name<>'.') and (sr.Name<>'..') then
begin
FileSetAttr(s+sr.Name,faArchive); //-----
RenameFile(s+sr.Name,s+'SH-'+ sr.Name );
end;
end;
until FindNext(sr) <> 0
end;
FindClose(sr);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sr : TSearchRec;
ts : TStringList;
i : Integer;
const
s = 'c:\gyj\'; //把所有要改名的都放在这个文件夹下,根据你的情况修改。
begin
if DirectoryExists(s) then
begin
ts := TStringList.Create;
try
if FindFirst(s+'*.*', faDirectory , sr) = 0 then
begin
repeat
if (sr.Attr and faDirectory ) = sr.Attr then
begin
if (sr.Name<>'.') and (sr.Name<>'..') then
ts.Add(sr.Name);
end;
until FindNext(sr) <> 0
end;
FindClose(sr); if ts.Count > 0 then
for i := 0 to ts.Count - 1 do
if DirectoryExists(s+ts.Strings[i]) then
RenameFile(s+ts.Strings[i],s+'SH-'+ts.Strings[i]);
finally
ts.Free;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i:Integer;
begin
for i := 1 to 10000 do
ForceDirectories('C:\gyj\' + IntToStr(i));
end;