Board logo

标题: [文件操作] 求助BAT脚本实现文件更名问题 [打印本页]

作者: 曾经的你    时间: 2018-9-27 11:06     标题: 求助BAT脚本实现文件更名问题

在win系统下,比如A文件夹种有很多的文件(无占用情况等);
我需要做到;把每一个后缀的文件分别从1命名到文件数量的结尾。。。。(比如有rar文件有100个,那么命名就为1.rar一直到100.rar;其他的文件后缀也这样改)
作者: 曾经的你    时间: 2018-9-28 08:22

回复 1# 曾经的你


    顶
作者: Batcher    时间: 2018-9-28 08:49

有子文件夹吗?
作者: 曾经的你    时间: 2018-9-28 18:18

回复 3# Batcher


    因为人工排除过所以没有子文件夹(不过可以把子文件夹写进去)
作者: Batcher    时间: 2018-9-28 20:47

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d "C:\A文件夹\"') do (
  4.     set /a %%~xi+=1
  5.     ren "%%i" !%%~xi!%%~xi
  6. )
复制代码

作者: 曾经的你    时间: 2018-9-30 16:43

回复 5# Batcher


    谢谢老大
作者: 曾经的你    时间: 2018-9-30 16:46

回复 5# Batcher


    怎么改成,作用在当前文件夹下呢
作者: 曾经的你    时间: 2018-9-30 16:47

回复 5# Batcher


    再就是排除一些这个bat处理文件(不重命名)
作者: Batcher    时间: 2018-10-1 08:53

回复 8# 曾经的你
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d') do (
  4.     if "%%i" neq "%0" (
  5.         set /a %%~xi+=1
  6.         ren "%%i" !%%~xi!%%~xi
  7.     )
  8. )
复制代码

作者: flashercs    时间: 2018-10-1 13:32

回复 9# Batcher


    文件如果是如下情况会失败。
#a.txt
_b.txt
!c.txt
1.txt
2.txt
3.txt
作者: flashercs    时间: 2018-10-1 18:25

重命名.bat
  1. 0<1/*,:
  2. @echo off
  3. REM rename files with same extension name in order using numbers. e.g: 1.txt 2.txt 3.txt ...
  4. %windir%\system32\CScript.exe -e:jscript -nologo %0 %*
  5. exit /b
  6. */;
  7. function rename(e){var r,t,i,a={},c={};try{r=new Enumerator(fso.GetFolder(e).Files)}catch(e){return}for(;!r.atEnd();r.moveNext())if(t=r.item(),!c[t.Name]&&t.Path!==WScript.ScriptFullName)for(i=fso.GetExtensionName(t.Name),""!==i&&(i="."+i),a.hasOwnProperty(i)?++a[i]:a[i]=1;;)try{t.Name!==a[i]+i&&(t.Name=a[i]+i);break}catch(e){c[""+a[i]+i]=!0,++a[i]}}var fso=new ActiveXObject("Scripting.FileSystemObject"),folder,oArgs=WScript.Arguments;new ActiveXObject("WScript.Shell").CurrentDirectory=fso.GetParentFolderName(WScript.ScriptFullName);for(var i=0,l=oArgs.length;i<l;++i)rename(oArgs(i));0===l&&rename(fso.GetParentFolderName(WScript.ScriptFullName)),WScript.Echo("Mission complete."),WScript.Quit();
复制代码

作者: Batcher    时间: 2018-10-1 19:24

回复 10# flashercs


    我很赞同。希望楼主没有这样的文件。
作者: zaqmlp    时间: 2018-10-1 20:27

本帖最后由 zaqmlp 于 2018-10-1 22:58 编辑
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/b *.*^|find /v "%~nx0"') do (
  3.     if "%%~xa" neq "" (
  4.         ren "%%a" "_%%~nxa"
  5.         if not defined %%~xa (set %%~xa=1)
  6.     )
  7. )
  8. for /f "tokens=1 delims==" %%a in ('set .') do (
  9.     for /f "tokens=1* delims=:" %%b in ('dir /a-d/b "*%%a"^|findstr /lie "%%a"^|findstr /n .') do (
  10.         if "%%~nxc" neq "%~nx0" (
  11.             rem echo;"%%c" --^> "%%b%%~xc"
  12.             ren "%%c" "%%b%%a"
  13.         )
  14.     )
  15. )
  16. pause
复制代码

作者: flashercs    时间: 2018-10-1 21:58

回复 13# zaqmlp


    不考虑没有扩展名的文件吗?
    不考虑扩展名为txt doc docx的类型?
作者: zaqmlp    时间: 2018-10-1 22:17

回复 14# flashercs
楼主说按扩展名,干嘛要考虑无扩展名的
作者: flashercs    时间: 2018-10-1 22:30

回复 15# zaqmlp


    那也不该伤害无扩展名的文件啊?
还有dir *.doc *.xls
会同样出现*.docx *.xlsx *.doca *.docb *.doct *.doc! 等任意文件
作者: zaqmlp    时间: 2018-10-1 22:59

回复 16# flashercs

那就把判断加上
作者: 曾经的你    时间: 2018-10-2 14:26

回复 9# Batcher


    谢谢老大这个bat已经能满足我的要求了,非常感谢
作者: 曾经的你    时间: 2018-10-2 14:26

回复 10# flashercs


    谢谢,我的这里边没有这种文档的
作者: 曾经的你    时间: 2018-10-2 14:27

回复 11# flashercs


    谢谢大佬,好复杂哦
作者: 曾经的你    时间: 2018-10-2 14:27

回复 13# zaqmlp


    谢谢大佬
作者: 曾经的你    时间: 2018-10-2 14:28

回复 16# flashercs


牛牛牛,膜拜大佬
作者: 曾经的你    时间: 2018-10-5 09:44

回复 11# flashercs


    非常好用,感谢大哥




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2