我想拜师学艺,高手能收我为徒吗?:怎样编程批量把photo文件夹里的图片名改为李三.bmp、张四.bmp…….?(100分)

  • 主题发起人 主题发起人 963119
  • 开始时间 开始时间
9

963119

Unregistered / Unconfirmed
GUEST, unregistred user!
在D盘mydate文件目录下有photo文件夹主要放fp0001.bmp-----fp2000.bmp图片和Excel文件夹主要放Excel文件(第一竖行放0001-2000数字编号,第二竖行放名称如“李三”),[red]怎样编程批量把photo文件夹里的图片名改为李三.bmp、张四.bmp…….?[/red]
 
俺是新手啊
哎……
俺也想找个老师
……
 
来自:cdj000, 时间:2006-6-11 8:49:39, ID:3467886
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('Create table test (qq1 int not null,qq2 text(10) not null)');
try
ExecSQL;
ShowMessage('创建表成功!');
except
ShowMessage('创建表失败!');
end;
end;

我想拜你为师可以吗?
 
一个循环就可以
1.首先你要学会把excel做为库处理
2.你要学会更改文件名的方法
3.你要学会查找文件
这三种技巧,你都可以找到资料的。
 
各位师父我还是菜鸟呀,不过我自信给个详细代码,我会举一反三的,谢了!!!
 
我也是新手 学了快三月 感觉还是要靠自己 努力把兄弟
 
请各位帮提前一下[:D]
 
对Excel的操作网上有很多资料,如果你觉得麻烦,对把excel表变成你熟悉的数据库,如access,里面有导入功能,下面就是对数据库的操作了,很多delphi书讲数据库操作都有access的例子。
修改文件名用RenameFile函数。
简单的代码:假设表名为test,字段为title1,title2
var
spath: string; // 文件夹路径
st1,st2:string;
.......
spath:='d:/mydate/photo/';
....
with ADOQuery1 do
begin
Close;
Sql.clear;
Sql.Add('select * from test');
Open;
while not Eof do
begin
st1 := 'fp' + FieldByName('title1').AsString + '.bmp'; // 原文件名
st2 := FieldByName('title2').AsString + '.bmp'; // 修改后的文件名
RenameFile(spath+st1,spath+st2); // 修改文件名
Next; // 到下一条记录
end;
end;
 
我对access不熟悉[:D]只熟悉Excel[:D]
 
对excel文件也可以当作数据表来处理的
 
不会呀!! [:(]
 
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//把Excel文件當成一個數據庫,
//把文件裏的Sheet1,Sheet2,Sheet3...當成是數據庫裏的表
//這樣你就操作自如了,
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, Buttons, ExtCtrls;

type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
OpenDialog1: TOpenDialog;
ListBox1: TListBox;
Panel1: TPanel;
Button1: TButton;
Edit1: TEdit;
SpeedButton1: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit1.Text:= OpenDialog1.FileName;
end;

//ADOConnection1,ADOQuery1,DataSource1,DBGrid1, ListBox1

procedure TForm1.Button1Click(Sender: TObject);
var
ConnStr, FileName: string;
i: integer;
begin
FileName:= Edit1.Text; //Excel File Name
ConnStr:= ''+
' Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin; ' +
' Data Source=' + FileName + ';Mode=Share Deny None;Extended Properties=Excel 8.0; ' +
' Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=""; ' +
' Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2; ' +
' Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB: ' +
' Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False; ' +
' Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False ';
ADOConnection1.Connected:= false;
ADOConnection1.ConnectionString:= ConnStr;
ADOConnection1.Connected:= true;
ListBox1.Clear;
ADOConnection1.GetTableNames(ListBox1.Items);
if ListBox1.Items.Count>0 then
begin
ListBox1.Selected[0]:= true;
ListBox1.ItemIndex:= 0;
ListBox1.OnClick(ListBox1);
end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
i: integer;
begin
ADOQuery1.Close;
if ListBox1.Items.Count<=0 then exit;
ADOQuery1.SQL.Text:= 'select * from ' + '['+ListBox1.Items.Strings[ListBox1.ItemIndex]+']';
ADOQuery1.Open;
for i:= 0 to DBGrid1.Columns.Count - 1 do
DBGrid1.Columns.Width:= 80;
Label2.Caption:=
' TableCount: '+ IntToStr(ListBox1.Count)+
' CurrentTableName: '+ ListBox1.Items.Strings[ListBox1.ItemIndex]+
' CurrentTableRecordCount: '+ IntToStr(ADOQuery1.RecordCount);
end;

end.

procedure TForm1.Button1Click(Sender: TObject);
var
ConnStr, FileName, TableName: string;
begin
FileName:= 'F:/Excel1.xls';
TableName:= '[Sheet1$]';
ConnStr:= ''+
' Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin; ' +
' Data Source=' + FileName + ';Mode=Share Deny None;Extended Properties=Excel 8.0; ' +
' Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=""; ' +
' Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2; ' +
' Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB: ' +
' Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False; ' +
' Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False ';
ADOConnection1.Connected:= false;
ADOConnection1.ConnectionString:= ConnStr;
ADOConnection1.Connected:= true;
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'select * from ' + TableName;
ADOQuery1.Open;
end;

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//文件處理
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

//判斷是不是目錄
function IsValidDir(SearchRec: TSearchRec): Boolean;
begin
result:= (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..');
end;

//傳入一個路徑,查找這個路徑下的所有文件(也查找所有子目錄下的所有文件)
procedure SearchAllPath(Path: string);
var
i: Integer;
sl_SubDir: TStrings;
SearchRec: TSearchRec;
begin
CheckStop;
if Trim(Path) = '' then exit;
sl_SubDir:= TStringList.Create;
if (FindFirst(Path + '/*.*', faDirectory, SearchRec) = 0) then
begin
if IsValidDir(SearchRec) and cbSubDir.Checked then sl_SubDir.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
if IsValidDir(SearchRec) and cbSubDir.Checked then sl_SubDir.Add(SearchRec.Name)
else if IsValidFile(SearchRec) then DoFile(Path, SearchRec.Name); //找到文件,進行處理
end;
end;
FindClose(SearchRec);
for i:= 0 to sl_SubDir.Count - 1 do
SearchAllPath(Path + '/' + sl_SubDir.Strings);
sl_SubDir.Free;
end;

//處理文件
procedure DoFile(Path, SearchRec.Name);
begin
//在這裏處理你的文件,比如改名呀等等.....
//用個全局變量作流水號,可以實現你的流水號改名....
//...............................................
end;
 
简单的要死,
你最好去用一个叫XLSREADWRITE的控件,轻松地把EXCEL表格里的数据读出来,然后用findfirst和FINDNEXT遍历那些文件,取得文件名后再一个个自动改。
 
叫XLSREADWRITE II我下后安装完不会用呀,我真的好笨啊[:(]
 
先看看文件操作的函数再说
 
谁能给个详细代码呀?
 
djrj这一段我还是不明白:

//處理文件
procedure DoFile(Path, SearchRec.Name);
begin
//在這裏處理你的文件,比如改名呀等等.....
//用個全局變量作流水號,可以實現你的流水號改名....
//...............................................
end;
 
djrj将得到20分
 
感觉象跟一个文员讲解dos是什么以及历史.....

拜托楼主把明确不会的东西讲出来,整个问题这样抛出来,而想要一个完整的解决方案的话,100分(哦 不对,现在才80)那是远远不够的。(要教你学操作数据库很费神的)

替djrj不值,整个问题都给你解决的90%,连excel的读表都居然给你做了....才20分?..
(你以为你是谁.....)(这句算我没说)

原谅我的无礼,只是觉得很郁闷。
请尊重别人的劳动,毕竟不是很多分,语气好点大家都愿意帮忙的。
 

Similar threads

后退
顶部