[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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。
目的是文件的顺序一目了然。
谢谢。

回复 20# buyiyang


   谢谢大佬指点!我试着格式化为fat32,dir成功了。
  1. D:\>cd.>1.docx
  2. D:\>dir /b /a-d *.doc
  3. 1.docx
复制代码



另外还有一点发现,如另一个帖子中提到的dir /x ,以前我这也是失败的,不显示短名也不报错,现在也成功显示短名了。
bat小白,请多指教!谢谢!

TOP

回复 19# 77七


   应该与分区和文件系统有关,exFat不行,FAT、FAT16、FAT32可以,磁盘管理器和diskpart分区格式化为NTFS不行,用diskgenius却可以。
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 18# buyiyang


   NTFS。这些小问题不影响使用。
bat小白,请多指教!谢谢!

TOP

回复 17# 77七


    你这个D盘是什么文件系统,exFAT系统对文件名的匹配会有不同。

TOP

回复 16# buyiyang

win10,
  
  1. Microsoft Windows [版本 10.0.19041.450]
  2. (c) 2020 Microsoft Corporation. 保留所有权利。
  3. D:\>cd.>1.docx&cd.>2.doc
  4. D:\>for %i in (*.doc) do echo %i
  5. D:\>echo 2.doc
  6. 2.doc
复制代码
bat小白,请多指教!谢谢!

TOP

回复 12# 77七


你用的什么系统,什么版本?
for %%i in (*.doc) do echo,%%i 可以展开匹配吗?

TOP

回复 1# dzwind


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

TOP

TOP

第1个数字(重复几遍),再加上源文件名中的任意字符
很可能重名

TOP

回复 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
复制代码
bat小白,请多指教!谢谢!

TOP

回复 9# 77七


    其实只要用 dir /b /a-d "*.doc" 就行,
因为通配符模式匹配文件名时后缀为3个字母即可兼容4个字母以上的后缀,这应该是从 dos 时代“8+3”文件名模式延续下来的

TOP

回复 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]
复制代码

TOP

回复 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
复制代码
bat小白,请多指教!谢谢!

TOP

回复 6# czjt1234


    几个重复的数字都行。目的是多写几个能够让我看清文件名,知道文件的顺序。

TOP

返回列表