标题: [文件操作] 批处理如何批量删除文件名上序号? [打印本页]
作者: yunxiyang 时间: 2024-8-12 19:59 标题: 批处理如何批量删除文件名上序号?
文件名格式:1.*****,2.******,3.*****,求问如何批量删除里面的"数字."?
作者: Batcher 时间: 2024-8-12 22:02
回复 1# yunxiyang
删除里面的"数字."之后剩下的文件名是否存在重名的可能性?如有重名,如何处理?
作者: 77七 时间: 2024-8-13 01:22
- @echo off
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /a-d ^|findstr /rbc:"[0-9][0-9]*\." ^|find /v "%~nx0"') do (
- set n=%%i
- setlocal enabledelayedexpansion
- ren "!n!" "!n:*.=!"
- endlocal
- )
- pause
复制代码
作者: yunxiyang 时间: 2024-8-13 16:55
回复 3# 77七
试了一下,很成功,太感谢了
作者: yunxiyang 时间: 2024-8-13 16:56
回复 2# Batcher
刚试了下楼下的代码,重名的只会生效一个,另一个不变
作者: Batcher 时间: 2024-8-13 22:06
回复 5# yunxiyang
是的。如果有重名的需要怎样处理,这个你的把需求描述清除。
作者: aloha20200628 时间: 2024-8-13 22:24
本帖最后由 aloha20200628 于 2024-8-14 13:01 编辑
回复 1# yunxiyang
如果判断有重名的后果,将会放弃本次更名,继续下一个...
若再有一个针对重名的更名策略,就会被‘打回原形’,还不如不更了...
- @echo off &for /f "tokens=1* delims=." %%a in (
- ' dir /b/a-d^|findstr /rbc:"[0-9][0-9]*\." '
- ) do if exist "%%b" (echo,"更名为 %%b 会导致重名 〉本次更名被取消...") else (ren "%%a.%%b" "%%b")
- pause&exit/b
复制代码
作者: 77七 时间: 2024-8-13 22:56
回复 7# aloha20200628
哈哈,大佬总结到位!
关于大佬代码中的判断是否存在重名,也不如不判断了,判断了没有提示,不判断则遇到重名cmd会报错提示!
作者: qixiaobin0715 时间: 2024-8-14 09:05
本帖最后由 qixiaobin0715 于 2024-8-14 09:31 编辑
出现重名文件时加顺序号重命名,按Windows的默认规则命名重名文件,比如“a.txt” “a (2).txt” “a (3).txt”...,这里来个简易版,假如各个重名不会超过10个:- @echo off
- for /f "tokens=1* delims=." %%i in ('dir /b /a-d^|findstr /b "[1-9][0-9]*\..*\."') do (
- if exist "%%j" (
- set n=1
- for /l %%k in (2,1,10) do (
- if not exist "%%~nj (%%k)%%~xj" (
- if defined n (
- set n=
- ren "%%i.%%j" "%%~nj (%%k)%%~xj"
- )
- )
- )
- ) else (
- ren "%%i.%%j" "%%j"
- )
- )
- pause
复制代码
未经测试,可能会有问题,大体思路应当没问题。
findstr要搜索的字符项([1-9][0-9]*\..*\.)后面比3楼的([0-9][0-9]*\.)多出了一部分,是为了防止当前目录存在类似1.txt这样的文件被误配。
作者: aloha20200628 时间: 2024-8-14 13:03
本帖最后由 aloha20200628 于 2024-8-14 13:44 编辑
回复 8# 77七
回复 1# yunxiyang
给7楼代码加了重名提示,善始善终吧...
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |