找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 53579|回复: 20

[文件操作] 求做一个能批量改文件名的BAT脚本,谢谢。

[复制链接]
发表于 2024-5-30 16:40:45 | 显示全部楼层 |阅读模式
本帖最后由 dzwind 于 2024-5-30 21:45 编辑

求做一个BAT,要求通过拖拽的方式将文件夹里所有的doc及docx重命名,重命名为取源文件名中第一个出现的数字及文件名中间或者最后面的字符(1个或者几个都行)。
举例说明:
比如:文件夹下有以下文件
1abcdef.doc
a2aaaa.docx
b3bbbb.doc
4ddddd.docx
我想通过bat的形式,将文件重命名为11111F.doc;2222a.docx;3333b.doc;4444d.docx。
目的是文件的顺序一目了然。
谢谢。
发表于 2024-5-30 17:46:50 | 显示全部楼层
这样命名有什么意义吗?而且确定不会产生重名吗?
 楼主| 发表于 2024-5-30 17:54:11 | 显示全部楼层
回复 2# 77七 谢谢您
发表于 2024-5-30 18:34:49 | 显示全部楼层
回复 1# dzwind

复述一遍更名规则须楼主确认》新文件名由首部和尾部构成,尾部是源文件名首次出现的数字及源文件名最后一个字符,首部是源文件名首次出现的数字重复3遍
发表于 2024-5-30 18:39:25 | 显示全部楼层
什么是
取文件名中第一个出现的数字及数字最后面的一个字符
完全看不懂
发表于 2024-5-30 20:08:43 | 显示全部楼层
为什么是5个1而不是4个1
 楼主| 发表于 2024-5-30 20:54:32 | 显示全部楼层
本帖最后由 dzwind 于 2024-5-30 21:04 编辑

回复 4# aloha20200628


    目标文件名是由第1个数字(重复几遍),再加上源文件名中的任意字符即可,这样可避免有重名文件。
目的是1、让我能一目了然看清文件名的顺序。2、简短文件名的长度。
因为我处理的文件有的文件名太长,前面的数字看不清。
 楼主| 发表于 2024-5-30 20:58:38 | 显示全部楼层
回复 6# czjt1234


    几个重复的数字都行。目的是多写几个能够让我看清文件名,知道文件的顺序。
发表于 2024-5-30 23:07:29 | 显示全部楼层
回复 7# dzwind


  
  1. @echo off
  2. if "%~1" equ "" (
  3.         exit
  4. ) else (
  5.         pushd "%~1" || exit
  6. )
  7. for /f "delims=" %%i in ('dir /b /a-d "*.doc?"') do (
  8.         set n=%%~ni
  9.         set x=%%~xi
  10.         for /f "tokens=1 delims=0123456789" %%a in ("\%%~ni") do (
  11.                 set _n=\%%~ni
  12.                 setlocal enabledelayedexpansion
  13.                 for /f "delims=" %%b in ("!_n:%%a=!") do (
  14.                         endlocal
  15.                         set nn=%%b
  16.                         setlocal enabledelayedexpansion
  17.                         ren "!n!!x!" "!nn:~0,1!!nn:~0,1!!nn:~0,1!!nn:~0,1!_!n:~-2!!x!"
  18.                         endlocal
  19.                 )
  20.         )
  21. )
  22. pause
复制代码
发表于 2024-5-30 23:13:12 | 显示全部楼层
回复 7# dzwind

假设拖入的是一个目标文件夹
代码第5行中的数字3是源文件名第一个数字的重复次数,可由楼主自定义

  1. @echo off & if "%~1"=="" exit/b
  2. pushd "%~1" &setlocal enabledelayedexpansion
  3. for /f "delims=" %%F in ('dir /b/a-d *.doc* 2^>nul') do (
  4.         set "docF=%%~nF"&set "nc="&(call :get_n docF n)
  5.         for /L %%n in (1,1,3) do set "nc=!nc!!n!"
  6.         ren "%%F" "!nc!!n!!docF:~-1!%%~xF"
  7. )
  8. popd&pause&exit/b
  9. :get_n
  10.         set "s=!%~1!"
  11.         :[loop]
  12.         set "c=!s:~,1!"&if "!c!" geq "0" if "!c!" leq "9" (set "%~2=!c!"&exit/b)
  13.         set "s=!s:~1!"&if "!s!"=="" (exit/b) else goto[loop]
复制代码
发表于 2024-5-30 23:33:40 | 显示全部楼层
回复 9# 77七


    其实只要用 dir /b /a-d "*.doc" 就行,
因为通配符模式匹配文件名时后缀为3个字母即可兼容4个字母以上的后缀,这应该是从 dos 时代“8+3”文件名模式延续下来的
发表于 2024-5-30 23:46:55 | 显示全部楼层
回复 11# buyiyang


   
谢谢大佬指点!
以前看过老帖 包括置顶贴 不能说的秘密 ,都有提及这个事,但是在我电脑上,行不通,不知道咋回事。
  1. D:\>cd.>1.docx

  2. D:\>dir /b /a-d *.doc
  3. 找不到文件

  4. D:\>dir /b /a-d *.docx
  5. 1.docx
复制代码
发表于 2024-5-31 08:23:49 | 显示全部楼层
第1个数字(重复几遍),再加上源文件名中的任意字符
很可能重名
 楼主| 发表于 2024-5-31 08:53:55 | 显示全部楼层
发表于 2024-5-31 09:50:28 | 显示全部楼层
回复 1# dzwind


    数字总共就0-9,,再接不管什么字符、几个字符,,重名的几率非常大,使用脚本的后果就是文件被覆盖或丢失。
如果单纯是觉得文件名太长,还不如看下规律提取一个前缀或者缩减名称长度,,最好直接用个改名工具。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:17 , Processed in 0.022317 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表