delphi 实现批量文件名修改


本文整理自网络,侵删。

 unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, RzButton, Vcl.ImgList,
  Vcl.ExtCtrls, RzShellDialogs,
  System.IOUtils, System.Types, Vcl.ComCtrls, RzListVw,
  System.RegularExpressionsCore, RzCommon;

type
  TForm1 = class(TForm)
    btn1: TButton;
    LabeledEdit1: TLabeledEdit;
    lbledt1: TLabeledEdit;
    btn2: TButton;
    ImageList1: TImageList;
    rzbtbtn1: TRzBitBtn;
    RzSelectFolderDialog1: TRzSelectFolderDialog;
    lst1: TRzListView;
    lbl1: TLabel;
    ini1: TRzRegIniFile;
    lbl2: TLabel;
    procedure rzbtbtn1Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    FPath: string;
    function replace(str, regx, replacement: string): string;
  public
    { Public declarations }
    procedure ControlEnable(AEnable: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  item: TListItem;
begin
  // lst1.items.BeginUpdate;
  for item in lst1.Items do
  begin
    item.SubItems.Clear;
    item.SubItems.Add(replace(item.Caption, LabeledEdit1.Text, lbledt1.Text))
  end;
  // lst1.items.EndUpdate;
end;

procedure TForm1.btn2Click(Sender: TObject);
var
  vFiles: TStringDynArray;
  vFile, vDest, vSrc: string;
  vPath: string;
begin
  // begin replace
  ControlEnable(False);
  vFiles := TDirectory.GetFiles(Self.FPath);
  for vSrc in vFiles do
  begin
    lbl2.Caption := '重命名:' + vSrc;
    vPath := ExtractFilePath(vSrc);
    vFile := ExtractFileName(vSrc);
    vDest := replace(vFile, LabeledEdit1.Text, lbledt1.Text);
    if vFile = vDest then
      Continue;
    vDest := vPath + '\' + vDest;
    try
      TFile.Move(vSrc, vDest);
    except
      ShowMessage('文件:【' + vSrc + '】改名失败!');
    end;
  end;
  // end

  ControlEnable(true);
  lst1.Items.BeginUpdate;
  lst1.Items.Clear;
  vFiles := TDirectory.GetFiles(Self.FPath);
  for vFile in vFiles do
  begin
    lst1.Items.Add.Caption := ExtractFileName(vFile)
  end;
  lst1.Items.EndUpdate;
end;

procedure TForm1.ControlEnable(AEnable: Boolean);
begin
  rzbtbtn1.Enabled := AEnable;
  LabeledEdit1.Enabled := AEnable;
  lbledt1.Enabled := AEnable;
  btn1.Enabled := AEnable;
  btn2.Enabled := AEnable;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ini1.WriteString('cfg', 'regx', LabeledEdit1.Text);
  ini1.WriteString('cfg', 'rep', lbledt1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  LabeledEdit1.Text := ini1.ReadString('cfg', 'regx', LabeledEdit1.Text);
  lbledt1.Text :=  ini1.ReadString('cfg', 'rep', lbledt1.Text);
end;

function TForm1.replace(str, regx, replacement: string): string;
var
  reg: TPerlRegEx; // 声明正则表达式变量
begin
  reg := TPerlRegEx.Create(); // 建立
  reg.Subject := str; // 这是要替换的源字符串
  reg.RegEx := regx; // 这是表达式, 在这里是准备替换掉的子串
  reg.replacement := replacement;
  reg.Options := [preCaseLess]; // 不区分大小的设定, 默认是区分的
  reg.ReplaceAll; // 执行全部替换
  Result := reg.Subject;
  FreeAndNil(reg); // 或 reg.Free
end;

procedure TForm1.rzbtbtn1Click(Sender: TObject);
var
  vFiles: TStringDynArray;
  vFile: string;
begin
  lst1.Items.BeginUpdate;
  lst1.Items.Clear;
  if RzSelectFolderDialog1.Execute then
  begin
    Self.FPath := RzSelectFolderDialog1.SelectedPathName;
    lbl1.Caption := '当前目录:' + Self.FPath;
    vFiles := TDirectory.GetFiles(Self.FPath);
    for vFile in vFiles do
    begin
      lst1.Items.Add.Caption := ExtractFileName(vFile)
    end;
  end;
  lst1.Items.EndUpdate;
end;

end.

相关阅读 >>

Delphi 中 unicode 转汉字 函数

Delphi 如何判断某一窗口最大化

解决 Delphi 程序在不同操作系统中 shellexecute 调用 chrome.exe 偶尔无效的问题

Delphi 系统服务状态获取管理员用户名

Delphi xe5 android手机端转换ansi字符串

Delphi 用sql语句添加删除修改字段

Delphi文本文件读与写

Delphi 调用exitwindows 关闭系统

行为判断Delphi中窗体最大化与最小化事件

Delphi 通过按键 esc 关闭程序

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...