如何有条件地批量更改文件名?有兴趣进入看一看。 ( 积分: 100 )

  • 主题发起人 主题发起人 红蚂蚁
  • 开始时间 开始时间

红蚂蚁

Unregistered / Unconfirmed
GUEST, unregistred user!
说明:
原本是歌库文件名,命名格式为:001_A_B_2.mpg
002_A_C_2.mpg
现想根据条件批量改名:查找字段B,把带有B的文件名中的字段A改为A1。
查找字段C,把带有C的文件名中的字段A改为A2。
 
说明:
原本是歌库文件名,命名格式为:001_A_B_2.mpg
002_A_C_2.mpg
现想根据条件批量改名:查找字段B,把带有B的文件名中的字段A改为A1。
查找字段C,把带有C的文件名中的字段A改为A2。
 
把这些文件列到文件列表框中,然后用循环,分别取文件名,然后POS B和C 找到后再RENAME.不就行了吗.
 
我倒有个批量更名的源码,你要的话留EMAIL吧
 
我要份看看 ~~~~~` ^_^ hs_kill@eyou.com

其实楼主就是一个遍历文件,读文件名然后进行字符串判断,如果符合条件就改名

关键就是字符串判断部分,像这样:
var
str:string;
begin
str:='001_A_C_2.mpg';
if pos('_B_',str)<>0 then
str:=StringReplace(str,'_A_','_A1_',[rfReplaceAll])
else if pos('_C_',str)<>0 then
str:=StringReplace(str,'_A_','_A2_',[rfReplaceAll]);
showmessage(str);
end;
 
谢谢app2001,E-MAIL:myhaio@tom.com
 
看看我的代码,有参考价值不

http://www.delphibbs.com/delphibbs/dispq.asp?lid=3167849

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type
TForm1 = class(TForm)
Button1:TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure ReplaceAllExt(AParentPath: string; AOrignExt, ADestExt: String);
[blue]// 路径, 原始扩展名,目标扩展名[/blue]
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.ReplaceAllExt(AParentPath: string; AOrignExt, ADestExt: String);
var
SR: TSearchRec;
nCount: Integer;
FileName: string;
begin
if not DirectoryExists(AParentPath) then begin
Application.MessageBox('文件夹不存在','提示', MB_OK +MB_ICONERROR);
Abort;
end;
nCount := FindFirst(AParentPath + '/*' + AOrignExt, faAnyFile, SR);// 这里设置你要搜索的文件
while nCount = 0 do begin
if (SR.Name <> '.') and (SR.Name <> '..') then begin
// 如果不是。和。。才继续
if SR.Attr = faDirectory then
// 如果是文件夹则递归
ReplaceAllExt(AParentPath + '/' + SR.Name, AOrignExt, ADestExt)
else begin
FileName := AParentPath + '/' + SR.Name;
// 修改文件名
ReNameFile(FileName, ChangeFileExt(FileName, ADestExt));
end;
end;
nCount := FindNext(SR);
end;
FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
[blue]// 路径, 原始扩展名,目标扩展名[/blue]
ReplaceAllExt('c:/aa', '.gif', '.txt');
end;
end.
 
把chenybin的修改文件名部分替换成我这块就OK了:
var
newname:string;

if pos('_B_',SR.Name)<>0 then
newname:=StringReplace(SR.Name,'_A_','_A1_',[rfReplaceAll])
else if pos('_C_',SR.Name)<>0 then
newname:=StringReplace(SR.Name,'_A_','_A2_',[rfReplaceAll]);
ReNameFile(FileName, AParentPath + '/' + newname);
 
to hs-kill:
这只对一个文件名的操作吧,但有几万个不同的str:='001_A_C_2.mpg'呢?
是否可以str:=' ';
即对一个硬盘目录里的所有文件名都用串来表达
 
只要你的文件名里包含_A_B_ 或者_A_C_就能替换啊

按我上面说的,和chenybin的合起来
 
发了,收一下吧
 
如果要改的文件名太多又要追求速度的话可以把文件名存到一个ACCESS表中再用SQL语句来改文件名字符串,改好后最后循环使用一次ReNameFile就会比较快了
 
TO 欢乐浪子
我已经导入到ACCESS中了,如何用SQL语句改名?我使用笨办法直接在ACCESS表里改名,改好了如何用ReNameFile命令?

谢谢APP2001,我收到了,试试看
 
我刚做完一个项目,里面就涉及到文件加密的,而且解密回来,也就是改名,你要的话我可以给你源程序,但我是要分的哦
 
to guo888go200388:
我只有100分了,可不可以给我?
 
谢谢大家啦,欢乐浪子的方法不错,又快又准!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部