文件名简体转繁体bat

时间:2023-03-08 23:15:26
文件名简体转繁体bat
@echo off
rem 指定文件夹路径
set fd=D:\下载的图片
rem 0为转换文件名,1为转换文件夹名,2为同时转换文件名和文件夹名
set f=0 rem 0为不包括子文件夹,1为包括子文件夹
set r=
rem 2为繁转简,4为简转繁
set n=
set locale=[System.Globalization.Cultureinfo]::CurrentCulture.LCID
if "%fd:~-1%" equ "\" set "fd=%fd:~,-%"
if "%r%" equ "" (set r=-r) else set "r="
if "%f%" equ "" (set "f=$_.PSIsContainer -eq $false") else (
if "%f%" equ "" (set "f=$_.PSIsContainer -eq $true") else set "f=1 -eq 1"
) powershell ^
\">> %fd%`r`n\"+('-'*45);^
$cs='^
using System;^
using System.Runtime.InteropServices;^
public static class ToConvert^
{^
[DllImport(\"kernel32\", CharSet = CharSet.Unicode, SetLastError = true)]^
public static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, string lpDestStr, int cchDest);^
}';^
Add-Type -TypeDefinition $cs;^
ls -Path '%fd%' %r%^|?{%f%}^|sort {$_.FullName.Length} -des^|^
%%{$scr=$_.Name;$len=$scr.Length;$des=' '*$len;^
[ToConvert]::LCMapString(%locale%, 0x0%n%, $scr, $len, $des, $len)^|out-null;^
if($scr -ne $des){^
$fd=[IO.Directory]::GetParent($_.FullName).FullName+'\';^
$newname=$fd+$des;^
$n=;^
while(Test-Path -LiteralPath $newname)^
{^
$n++;^
if($_.PSIsContainer){^
$newname=$fd+$des+'_'+$n;^
}else{^
if($des -match '(.+)(\.[^^\.]+$)'){$tmp=$matches[]+'_'+$n+$matches[]}else{$tmp=$des+'_'+$n}^
$newname=$fd+$tmp;^
}^
}^
mv -literalpath $_.FullName $newname;^
if(Test-Path -LiteralPath $_.FullName){$ts='*转换失败,需手动重命名';}else{$ts=$newname.Split('\')[-1];}^
$_.FullName.ToLower().replace('%fd%'.ToLower(),'')+' ==^> '+$ts;^
}^
}
pause