Board logo

标题: [文件操作] 批处理如何批量删除文件名上序号? [打印本页]

作者: yunxiyang    时间: 2024-8-12 19:59     标题: 批处理如何批量删除文件名上序号?

文件名格式:1.*****,2.******,3.*****,求问如何批量删除里面的"数字."?
作者: Batcher    时间: 2024-8-12 22:02

回复 1# yunxiyang


    删除里面的"数字."之后剩下的文件名是否存在重名的可能性?如有重名,如何处理?
作者: 77七    时间: 2024-8-13 01:22

  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('dir /b /a-d ^|findstr /rbc:"[0-9][0-9]*\." ^|find /v "%~nx0"') do (
  4. set n=%%i
  5. setlocal enabledelayedexpansion
  6. ren "!n!" "!n:*.=!"
  7. endlocal
  8. )
  9. 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

如果判断有重名的后果,将会放弃本次更名,继续下一个...
若再有一个针对重名的更名策略,就会被‘打回原形’,还不如不更了...
  1. @echo off &for /f "tokens=1* delims=." %%a in (
  2.      ' dir /b/a-d^|findstr /rbc:"[0-9][0-9]*\." '
  3. ) do if exist "%%b" (echo,"更名为 %%b 会导致重名 〉本次更名被取消...") else (ren "%%a.%%b" "%%b")
  4. 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个:
  1. @echo off
  2. for /f "tokens=1* delims=." %%i in ('dir /b /a-d^|findstr /b "[1-9][0-9]*\..*\."') do (
  3.     if exist "%%j" (
  4.         set n=1
  5.         for /l %%k in (2,1,10) do (
  6.             if not exist "%%~nj (%%k)%%~xj" (
  7.                 if defined n (
  8.                     set n=
  9.                     ren "%%i.%%j" "%%~nj (%%k)%%~xj"
  10.                 )
  11.             )
  12.         )
  13.     ) else (
  14.         ren "%%i.%%j" "%%j"
  15.     )
  16. )
  17. 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://www.bathome.net/) Powered by Discuz! 7.2