标题: Windows批量有规律更改文件名 创建: 2022-12-12 23:26 更新: 2023-11-29 09:46 链接: https://scz.617.cn/windows/202212122326.txt 耳朵问了个问题,怎样批量修改文件名为从1开始的数字,在不下软件的情况下。 至少可以写个rename.bat,内容如下,支持目录树 -------------------------------------------------------------------------- @rem rename.bat [target dir] @echo off setlocal enabledelayedexpansion if "%~1" == "" ( set target="." ) else ( set target=%1 ) set i=0 for /r %target% %%x in (*) do ( rem echo "%%~nxx" if not "%%~nxx" == "rename.bat" ( set /a i += 1 rem @echo "%%x" "%%~dpx" "%%~dpx!i!%%~xx" rem @echo rename "%%x" "!i!%%~xx" if not exist "%%~dpx!i!%%~xx" ( rename "%%x" "!i!%%~xx" ) ) ) -------------------------------------------------------------------------- DOS批处理属于过时的技术,比较复杂,前述实现的部分参数可参"for /?",其余看 不明白的放狗搜吧。只在Win10的cmd中测试,不清楚Windows更早版本是否适用。 上面是保留扩展名的版本,下面是不保留扩展名的版本 -------------------------------------------------------------------------- @rem rename.bat [target dir] @echo off setlocal enabledelayedexpansion if "%~1" == "" ( set target="." ) else ( set target=%1 ) set i=0 for /r %target% %%x in (*) do ( rem echo "%%~nxx" if not "%%~nxx" == "rename.bat" ( set /a i += 1 rem @echo "%%x" "%%~dpx" "%%~dpx!i!%%~xx" rem @echo rename "%%x" "!i!%%~xx" if not exist "%%~dpx!i!" ( rename "%%x" "!i!" ) ) ) -------------------------------------------------------------------------- 若非IT人士,较简用法是 -------------------------------------------------------------------------- Win+R 输入cmd回车 执行"cd /d " 执行"rename.bat ." -------------------------------------------------------------------------- 不会命令行的,将rename.bat放到目标目录,双击执行即可。注意rename.bat属于不 可逆操作,谨慎使用。 渣浪用户uid(1650307040) uid(2005085137)提供了PowerShell实现,学习TA俩的实 现后我做了一点笔记。下面是批量重命名之前的一些测试记录 Get-ChildItem | Select * Get-ChildItem -Recurse -Path . -File | Select BaseName,Extension Get-ChildItem -Recurse -Path . -File | Where {$_.Extension -eq '.jpg'} $i=0;Get-ChildItem -Recurse -Path . -File | %{Write-Output ('{0} -> {1}\{2}{3}' -f $_.FullName, $_.DirectoryName, ++$i, $_.Extension)} Get-ChildItem -Recurse -Path . -File | foreach {$i=0} {Write-Output ($_.FullName + " -> " + $_.DirectoryName + "\" + ('{0}' -f ++$i) + $_.Extension)} -f左侧是fmt,右侧是实际参数,{0}、{1}等对应实参的位置。Get-ChildItem不要用 "-Name",用如下命令检查,此时有PSChildName属性,没有Extension属性。 Get-ChildItem -Name | Select * 如下命令均可完成批量重命名,支持目录树 Get-ChildItem -Recurse -Path . -File | %{$i=0}{Rename-Item $_.FullName -NewName ('{0}\{1}{2}' -f $_.DirectoryName, ++$i, $_.Extension)} Get-ChildItem -Recurse -Path . -File | foreach {$i=0} {Rename-Item $_.FullName -NewName ($_.DirectoryName+('\{0}' -f ++$i)+ $_.Extension)} %和foreach都是ForEach-Object的别名 $ alias | findstr ForEach-Object $ Get-Alias -Definition ForEach-Object Alias % -> ForEach-Object Alias foreach -> ForEach-Object Get-ChildItem之后对文件名排序后倒序输出 Get-ChildItem -Recurse -Path . -File | Sort-Object -Property FullName -Descending | %{$i=0}{Write-Output ('{0} -> {1}\{2}{3}' -f $_.FullName, $_.DirectoryName, ++$i, $_.Extension)} Get-ChildItem -Recurse -Path . -File | Sort-Object -Property @{Expression = "FullName"; Descending = $true} | %{$i=0}{Write-Output ('{0} -> {1}\{2}{3}' -f $_.FullName, $_.DirectoryName, ++$i, $_.Extension)} $ alias | findstr sort Alias sort -> Sort-Object 渣浪用户uid(5688990748)提供了一个有意思的思路,选中所有待改名文件,复制路 径,粘到Excel里,批量删除每条前面的路径只留文件名,然后左侧加一列都是ren, 右侧加一列都是新文件名,把这三列粘到txt里,再把txt改成bat。 TA这个办法不能处理目录树,里面那句「批量删除每条前面的路径」不必做,但可能 有人好奇怎么做,有多种实现办法,其中一种是利用Excel的「分列」功能 -------------------------------------------------------------------------- 选中路径列所有行 菜单中选中"数据" 分列 -------------------------------------------------------------------------- 分列时有一些具体操作,挺直白的,试试就会,参看 https://mp.weixin.qq.com/s/F1J1HB543xh917pPrPxZvw "dir /B"直接获取无路径的文件名,但该操作不适用于非IT人士。 渣浪用户uid(1926822403)用ChatGPT找了一段PowerShell实现,某种程度上这是可行 的。他找来的方案并不比前述网友提供的PS实现优越,不展示。我自己倒是去试了试 ChatGPT,中英提问都试过,其回答需要提问者自行鉴别后修正,有些不但不满足原 始需求,并且从语法上讲就有问题,ChatGPT不是stackoverflow。我试了跟TA瞎聊天, 对学英语来说,是个好东西。 ChatGPT https://chat.openai.com/auth/login https://github.com/f/awesome-chatgpt-prompts 非IT人士不必尝试ChatGPT,官面上不对大陆地区提供服务,即使科学上网,注册后 有个短信验证过程,需要境外号码收短信。黑产人士自然不存在这些障碍,还有所谓 的接码平台,但黑产人士是IT人士的子集,我说的话没毛病。 渣浪用户uid(5842171682)提到"Microsoft PowerToys"的PowerRename功能,从 "Microsoft Store"安装,适用于Win10、Win11,虽然是微软工具,但非系统自带, 不满足原始需求。尽管如此,还是试了一下,可以达成批量修改文件名为从1开始的 数字,整个过程比较复杂,完全不适用于非IT人士。 a) 在资源管理器中批量选中待改名文件,右键PowerRename b) 在"搜索"框中输入".*" c) 勾选"使用正则表达式" d) 在"文本格式化处"选中"枚举项" e) 点击"应用" 上述操作导致目标文件批量重命名成(1)、(2)、(3)等等,这不符合要求,但已接近, 剥离左右两侧的圆括号即可。 a) 在"搜索"框中输入"\((.*)\)" b) 勾选"使用正则表达式" c) 在"替换为"框中输入"$1" d) 在"文本格式化处"清除"枚举项" e) 点击"应用" 拥有正则表达式技能的不难理解前述两组操作,借助"枚举项"产生自然数序列,两组 操作无法合二为一。整个过程并不直观,记录备忘。 2023-11-29 09:46 scz 若允许下软件,批量重命名的工具海了去了。随便提几个,绿色、便携(免安装)、免 费。 XnViewMP https://www.xnview.com/en/xnviewmp/ https://download.xnview.com/XnViewMP-win-x64.zip XnView MP/Classic is a free Image Viewer. You have features like color adjusting, image resizer, cropping, screen capture, metadata editing, batch rename, batch converter, duplicate image finder, image compare. XnViewMP可对任意文件批量重命名,不要求必须是图片。名称模板用「######」时, 缺省情况下从000001开始递增,保持扩展名不变,但可以指定初始数字,也可以指定 新的扩展名。