找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

搜索
查看: 84|回复: 0

[分享] 分享写的修改字体文件名称的代码

[复制链接]
  • TA的每日心情
    开心
    2025-2-4 10:31
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    1

    主题

    4

    回帖

    49

    积分

    3期培训会员

    积分
    49
    来自: 中国
    发表于 2025-2-4 10:48:39 | 显示全部楼层 |阅读模式 来自: 中国
    非业余 - aardio 编程语言 - 非官方问答社区
    风行者三期培训:Aardio+Python+Flutter,1000集课程让你成为全栈开发高手!https://mp.weixin.qq.com/s/_WOoHFtITUyLk2k7BXYGkg
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    aardio风行者第三期培训班https://mp.weixin.qq.com/s/cdZcvFiAWhlYTaSrQGCPvA

    有时候下了很多中文字体,都是字母文件名,不知道是什么字体,需要打开字体文件才知道字体的中文名称,查找批量修改字体名称的工具,没找到好用的,那就试试自己写一个吧。

    [AAuto] 纯文本查看 复制代码
    import win.ui;
    /*DSG{{*/
    var winform = win.form(text="字体修改工具";right=1170;bottom=741)
    winform.add(
    ["btn_删除字体文件"]={cls="button";text="删除字体文件";left=462;top=38;right=550;bottom=68;z=13};
    ["btn_添加字体文件"]={cls="button";text="添加字体文件";left=462;top=9;right=550;bottom=39;z=4};
    ["btn_清除无效字体文件"]={cls="button";text="清除无效字体文件";left=343;top=38;right=462;bottom=68;z=12};
    ["btn_选择字体文件路径"]={cls="button";text="选择字体文件路径";left=343;top=9;right=462;bottom=39;z=1};
    ["btn_重命名全部字体文件"]={cls="button";text="重命名全部字体文件";left=270;top=669;right=549;bottom=730;z=6};
    ["btn_重命名选择的字体文件"]={cls="button";text="重命名选择的字体文件";left=5;top=669;right=269;bottom=730;z=5};
    ["edit_字体名称"]={cls="edit";left=345;top=629;right=544;bottom=654;edge=1;multiline=1;readonly=1;z=8};
    ["edit_文件名"]={cls="edit";left=69;top=629;right=257;bottom=654;edge=1;multiline=1;readonly=1;z=7};
    ["edit_路径"]={cls="edit";left=5;top=9;right=341;bottom=39;edge=1;multiline=1;z=2};
    ["listbox_字体"]={cls="listbox";left=5;top=78;right=549;bottom=622;edge=1;items={};vscroll=1;z=3};
    ["re_字体详情"]={cls="richedit";left=562;top=1;right=1168;bottom=730;edge=1;multiline=1;z=11};
    static={cls="static";text="文件名";left=15;top=632;right=72;bottom=657;center=1;transparent=1;z=9};
    static2={cls="static";text="字体名称";left=278;top=631;right=335;bottom=656;center=1;transparent=1;z=10}
    )
    /*}}*/
    
    import fsys;
    import fsys.dlg;
    import fsys.dlg.dir;
    import fsys.path;
    //import console; 
    import win.font;
    //io.open(); 
    
    func_文件列表去重 = function() {
    	var tab = winform.listbox_字体.items;
    	var rst = {}
    	// 去重
    	if(#tab) {
    		tab = table.unique(tab)
    		// 去除无效路径 winform.listbox_字体.items
    		for k, v in tab {
    			if(!io.exist(v)) {
    				table.remove(tab, k)
    				winform.re_字体详情.print("删除 ->",k, v)
    				//console.dumpJson(tab);
    			} else {
    				table.push(rst, v)
    				winform.re_字体详情.print("无需删除 ->",k, v)
    			}
    		}
    		winform.listbox_字体.items =rst;
    	}
    }
    
    // 定义一个函数来判断字符串是否包含中文字符
    func_is_有汉字 = function(str) {
        // 遍历字符串中的每个字符
        for i = 1, #str, 1 {
            // 获取当前字符的Unicode编码
            var char = string.slice(str, i, i, true);
            var u = string.charCodeAt(char);
            // 检查Unicode编码是否在中文字符的范围内
            if (u >= 0x4e00 && u <= 0x9fa5) {
                return true;
            }
        }
        return false;
    }
    
    winform.btn_添加字体文件.oncommand = function(id,event){
    	var tab = fsys.dlg.openEx('字体文件|*.ttf;||',,,winform);
    	//console.dumpJson(tab)
    	if(#tab) {
    		for k,v in tab {
    			winform.listbox_字体.add( v)
    		}
    		func_文件列表去重()
    	}
    	
    }
    
    winform.listbox_字体.oncommand = function(id,event){
    	var p = winform.listbox_字体.selText
    	if(p == null) {return;}
    	if(io.exist(p)) {
    		var p_分解 = io.splitpath(p)
    		if(p) {
    			var s = win.font.getResourceInfo(p)
    			winform.edit_文件名.text = p_分解.name
    			winform.edit_字体名称.text = s.description
    			winform.re_字体详情.print(s)
    			
    		}
    	}
    }
    
    winform.btn_选择字体文件路径.oncommand = function(id,event){
    	var p = fsys.dlg.dir(, winform, '请选择目录')
        if (p) {
            winform.edit_路径.text = p;
            fsys.enum( p, "*.ttf*",
            	function(dir,filename,fullpath,findData){ 
            		if(filename){ 
                       	io.print("发现文件:"+filename,"完整路径:"+fullpath)/*可使用 return false退出枚举文件过程*/
                       	winform.listbox_字体.add( fullpath)
            		}
            		else{
            			io.print( "发现目录:" + dir )
            		}
            	},false
            	
            );
            func_文件列表去重()
        }
        
    }
    
    
    func_重命名字体 = function(字体路径, 选中索引) {
    	var p = 字体路径
    	var list_ind = winform.listbox_字体.selIndex
    	if(p == null) {return;}
    	if(io.exist(p)) {
    		var s;
    		if(p) {
    			s = win.font.getResourceInfo(p)
    		}
    		fontname = s.description
    		var p_分解 = io.splitpath(p)
    		newname = io.joinpath( p_分解.drive, p_分解.path, fontname + p_分解.ext)
    		winform.re_字体详情.print("newname = ", newname)
    		is_fontname_有汉字 = func_is_有汉字(fontname);
    		is_文件名_有汉字 = func_is_有汉字(p_分解.name);
    		
    		is_a = is_fontname_有汉字 && !is_文件名_有汉字
    		is_b = !is_fontname_有汉字 && !is_文件名_有汉字
    		is_c = is_fontname_有汉字 && is_文件名_有汉字
    		is_d = !is_fontname_有汉字 && is_文件名_有汉字
    		is_文件名等于字体名 = fontname == p_分解.name
    		
    		winform.re_字体详情.print("newname => ", newname)
    		if(!is_文件名等于字体名) {
    			//console.log(newname)
    			
    			if( is_a || is_b || is_c) {
    				// 需要修改名字
    				if(io.exist(newname)) {
    					// 如果目标文件名的文件已存在,加副本2字
    					var 计数 = 1;
    					winform.re_字体详情.print("文件名已存在,保存为副本!")
    					newname2 = io.joinpath( p_分解.drive, p_分解.path, fontname + "-副本(" + 计数 + ")" + p_分解.ext)
    					winform.re_字体详情.print("newname2 = ", newname2)
    					if(newname2 !== newname) {
    						while io.exist(newname2){
    							计数 = 计数 + 1
    							newname2 = io.joinpath( p_分解.drive, p_分解.path, fontname + "-副本(" + 计数 + ")" + p_分解.ext)
    						}
    						io.rename(p, newname2)
    						winform.listbox_字体.delete(选中索引)
    						winform.listbox_字体.add(newname2, 选中索引)
    						winform.re_字体详情.print("修改副本名字成功!")	
    					}else {
    						winform.re_字体详情.print("副本已存在,无需修改名字! ")
    					}
    			
    				} else {
    					// 如果目标文件名的文件不存在,直接改名
    					io.rename(p, newname)
    					winform.listbox_字体.delete(选中索引)
    					winform.listbox_字体.add(newname, 选中索引)
    					//winform.listbox_字体. = newname
    					winform.re_字体详情.print("修改名字成功! => ", newname)
    				}
    			}
    		} else {
    			winform.re_字体详情.print("无需修改名字!")
    		}
    
    	} else {
    		winform.re_字体详情.print("文件不存在:" , p)
    	}
    }
    
    winform.btn_重命名选择的字体文件.oncommand = function(id,event){
    	var 字体路径 = winform.listbox_字体.selText;
    	var select_ind = winform.listbox_字体.selIndex;
    	func_重命名字体(字体路径, select_ind)
    }
    
    winform.btn_重命名全部字体文件.oncommand = function(id,event){
    	var tab = winform.listbox_字体.items;
    	if(#tab) {
    		for k, p in tab {
    			func_重命名字体(p, k)
    		
    		}
    	}
    	
    }
    
    winform.btn_清除无效字体文件.oncommand = function(id,event){
    	var rst = {}
    	var tmp_items = winform.listbox_字体.items
    	tmp_items = table.unique(tmp_items)
    	for k, v in  tmp_items {
    		if( io.exist(v) ) {
    			winform.re_字体详情.print("存在 ", k, v)
    			table.push(rst, v)
    		} else {
    			winform.re_字体详情.print("不存在 ", k, v)
    		}
    	}
    	winform.listbox_字体.items = rst;
    }
    
    winform.btn_删除字体文件.oncommand = function(id,event){
    	winform.listbox_字体.delete()
    	import console;
    	console.dump(winform.listbox_字体.items)
    }
    
    
    
    
    winform.show();
    win.loopMessage();
    return winform;

    非业余 - aardio 编程语言 - 非官方问答社区
    风行者三期培训:Aardio+Python+Flutter,1000集课程让你成为全栈开发高手!https://mp.weixin.qq.com/s/_WOoHFtITUyLk2k7BXYGkg
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    aardio风行者第三期培训班https://mp.weixin.qq.com/s/cdZcvFiAWhlYTaSrQGCPvA
    回复

    使用道具 举报

    *滑块验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|非业余 - aardio 编程语言 - 非官方问答社区 知道创宇云防御

    GMT+8, 2025-2-22 02:07 , Processed in 0.100640 second(s), 30 queries .

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表