批量处理文件名任何后缀的中文文件名字后面加全拼首首字母的批处理?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批量处理文件名任何后缀的中文文件名字后面加全拼首首字母的批处理?相关的知识,希望对你有一定的参考价值。

比如:格兰蒂亚[GLDY]

@echo off & Title 获取中文拼音首字母,并添加到文件名中 By 依梦琴瑶

::以下代码请勿随意更改,以免运行出错。
setlocal enabledelayedexpansion
mode 60,2 & color 0a & cd /d %~dp0
set "PY_Data=PinYin.dat"
if not exist "%PY_Data%" (
color 0c & mode 65,4
echo 当前目录下缺少 %PY_Data% 拼音对照表数据库,请前往以下站点下载:
set "wA=ht"&set "wB=tps"&set "wC=://"&set "wD=pan"&set "wE=bai"
set "wF=du"&set "wG=com"&set "wH=/s/"&set "wI=1i53Lurb"
echo !wA!!wB!!wC!!wD!.!wE!!wF!.!wG!!wH!!wI!
ping 127.0.0.1 -n "5">nul
start "" "!wA!!wB!!wC!!wD!.!wE!!wF!.!wG!!wH!!wI!"
exit
)
echo 正在获取拼音首字母并重命名中,请耐心等待。。。
for /f "delims=" %%a in ('dir /a-d/s/b') do (
if /i not "%%~fa"=="%~dp0%PY_Data%" (
if /i not "%%~fa"=="%~f0" (
call:GetOnePY "%%~na"
if /i not "%%~na"=="!PinYin!" (
ren "%%~a" "%%~na[!PinYin!]%%~xa" >nul 2>nul
)
)
)
)
cls & echo 此次中文拼音首字母处理完毕,请按任意建退出。
pause>nul
exit

:GetOnePY
set "Str=%~1"
set "PinYin=%~1"
set Num=0
:LenLoop
set "LenStr=!Str:~%Num%,1!" & set "DY=0"
if "!LenStr!"=="" goto :eof

echo "!LenStr!" | findstr /r "[0-9a-zA-Z\[\],.~!@#$%^&()-+=;'\<\>?]" >nul 2>nul || (
for /f "tokens=1 delims==" %%b in ('findstr /i /c:"!LenStr!" "%PY_Data%" 2^>NUL') do (
set /a DY+=1
set "PY!DY!=%%~b"
)
)

if !DY! gtr 1 (
cls & mode 65,10
echo 【!LenStr!】是一个多音字,请手动选择它在【!Str!】中合适的拼音:& echo,
for /l %%c in (1,1,!DY!) do (
echo %%c、!PY%%c!
)
echo, & set /p xz=请输入对应编号后回车确认:
call set "PY=%%PY!xz!%%"
) else (
if !DY! equ 0 (
set "PY=!LenStr!"
) else (
set "PY=!PY1!"
)
)
cls & mode 60,2 & echo 正在获取拼音首字母并重命名中,请耐心等待。。。
call set "PinYin=%%PinYin:!LenStr!=!PY:~,1!%%"
set /a Num+=1
goto LenLoop
参考技术A

不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的多个文件放一起双击运行

<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
rem 将当前目录里多个文件名称中的中文汉字转换为拼音首字母
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "self=%~f0"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$self=get-item -literal $env:self;$current=$self.Directory.FullName;
$b=[Convert]::FromBase64String("IC0tPiA=");
$c=[Text.Encoding]::Default.GetString($b);
$bs="sj#niynip+sj+sloot+moc#zanihc#slootssc++:ptth";
$arr=$bs.replace('#', '.').replace('+', '/').ToCharArray();
[Array]::Reverse($arr);$url=$arr -join '';
$web=New-Object System.Net.WebClient;
$web.Encoding=[Text.Encoding]::UTF8;
$html=$web.DownloadString($url);
$m1=[regex]::match($html, 'var pydic ?= ?"([^"]+)"');
if($m1.success)
    $pydic=$m1.groups[1].value;
    $files=@(dir -literal $current|?($self.Name -ne $_.Name) -and ($_ -is [System.IO.FileInfo]));
    for($i=0;$i -lt $files.length;$i++)
        $base=[regex]::replace($files[$i].BaseName, '[\\u4e00-\\u9fa5]', 
            param($x);$zh=$x.groups[0].value;
            $n=$pydic.IndexOf($zh);
            if($n -ge 0)
                $en=$pydic.Substring($n+1, 1);
                $en=($en -replace '[āáǎà]','a') -replace '[ōóǒò]','o';
                $en=($en -replace '[ēéěè]','e');
                $zh=$en.ToUpper();
            
            return $zh;
        );
        if($base -ne $files[$i].BaseName)
            $suffix='['+$base+']';$reg=[regex]::Escape($suffix+'$');
            $newname=($files[$i].BaseName -replace $reg,'')+$suffix+$files[$i].Extension;
            $files[$i].FullName.Substring($current.length+1)+$c+$newname;
        
    

追问

你的代码是不是还需要数据库?我测试不行呢,代码命名格式是对的,就是不生效!
铁拳6.iso --> 铁拳[TQ]6.iso
请按任意键继续. . .
如果是这样:铁拳6.iso --> 铁拳6[TQ6].iso就更好

追答

按运行代码后窗口标题栏中的提示联系我

参考技术B 文件名有相同命名的前缀后缀或中间字符,需要去除相应的字符。
我是从内网导出数据,经去水印处理,每个文件多了(无水印)的前缀,需要去掉(无水印)5个字符,我的文件层级为A文件,A文件夹下多个B文件,B文件下多个日期文件,日期文件夹下的多个图片需要去除相同前缀。
参考技术C import os
path = r'C:\Users\Desktop\海洋数值预报解释应用产品\中尺度涡'

for dirname in os.listdir(path):
print(dirname)
fullpath = os.path.join(path,dirname)
if dirname[-2:] == 'py':
continue #过滤掉改名的.py文件

for file in os.listdir(fullpath):
#print(file)
name = file.replace('(无水印)',''); #修改前缀
print("new_name name is %s" %(name))
print(os.path.abspath(os.curdir))
os.chdir(fullpath)
os.rename(file,name)

如何 批量 给 某个文件夹 里面 的几十个文件的名字加入个前缀或后缀

应用场景是这样的,我找了几十个各种各样的图片,这些图片名字都不同或部分相同:如:爱的的、123、阿尼的、爱的的1、爱的的2、你好、专业。。。。等等,怎么批量让这些名字都加入一个前缀或后缀,例如加入时间 2015 或其他标识词????

批量给文件名加相同前缀的方法,也可以加后缀:

步骤1,下载工具软件后安装打开,然后将需要添加前缀的文件导入到软件中,也可以通过拖动文件到软件进行导入。

步骤2,这时候在左边可以看到设置界面,命名方式选择“插入”;然后在插入内容右边输入添加的前缀;最后插入位置选择“文件名头”。这时候在右边可以预览到新的文件名称了,可以随时修改随时预览。

步骤3,当设置好了之后就可以点击【开始重命名】按钮,启动软件程序了,处理完成后软件会弹出“重命名成功”的窗口。

步骤4,通过案例对比可以看出,修改后的文件名前面都添加了相同的前缀。

参考技术A

最简单的,当然用DOS的批处理来添加前缀或后缀了。

如果更复杂的,可以使用Office的宏过程VBA来实现符合你专用要求的添加,或者现成的支持批量更名的工具软件,很多,比如:

追问

win7用不了,安装不断弹各种问题。

追答

Win7能用!弹问题等它弹完就了事了。

本回答被提问者和网友采纳
参考技术B 如果是Excel的话,就很简单。
假设数据在A列,你在B列输入公式:
="XXX"&A1&"YYY"
然后填充即可。
或者是Word的一行行的文字的话也很好办。
全选文字,点表格菜单,转换,文本转换成表格。转换后再将其复制至Excel中,再按上面Excel方法做,做完了将其复制回Word中,再将表格转换成文本。

以上是关于批量处理文件名任何后缀的中文文件名字后面加全拼首首字母的批处理?的主要内容,如果未能解决你的问题,请参考以下文章

从ftp服务器进行批量下载,处理文件名保存时重名的问题,更改重名文件名方式为给后面加123等数字,保持后缀不变

文件如何批量添加后缀名?

find可以加哪些后缀

QT的 .pro项目文件写法

用shell命令怎样批量删除文件的后缀名

怎么去掉文件后面的后缀名