标题: [文件操作] 求助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
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d "C:\A文件夹\"') do (
- set /a %%~xi+=1
- ren "%%i" !%%~xi!%%~xi
- )
复制代码
作者: 曾经的你 时间: 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# 曾经的你 - @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d') do (
- if "%%i" neq "%0" (
- set /a %%~xi+=1
- ren "%%i" !%%~xi!%%~xi
- )
- )
复制代码
作者: 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- 0<1/*,:
- @echo off
- REM rename files with same extension name in order using numbers. e.g: 1.txt 2.txt 3.txt ...
- %windir%\system32\CScript.exe -e:jscript -nologo %0 %*
- exit /b
- */;
- 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 编辑
- @echo off
- for /f "delims=" %%a in ('dir /a-d/b *.*^|find /v "%~nx0"') do (
- if "%%~xa" neq "" (
- ren "%%a" "_%%~nxa"
- if not defined %%~xa (set %%~xa=1)
- )
- )
-
- for /f "tokens=1 delims==" %%a in ('set .') do (
- for /f "tokens=1* delims=:" %%b in ('dir /a-d/b "*%%a"^|findstr /lie "%%a"^|findstr /n .') do (
- if "%%~nxc" neq "%~nx0" (
- rem echo;"%%c" --^> "%%b%%~xc"
- ren "%%c" "%%b%%a"
- )
- )
- )
- 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 |