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


    那你要保留哪一部分呢?只留数字?

TOP

本帖最后由 CrLf 于 2014-5-4 02:31 编辑

有 sed 可以这样:
  1. @dir /s /a-d /b *.txt | sed "s/.*\[\([0-9][0-9]\)\][^\\]*/ren \"^&\" \"\1.txt\"/;ta;d;:a" | cmd
复制代码

TOP

本帖最后由 CrLf 于 2014-5-4 02:31 编辑

有 gawk 可以这样:
  1. @dir /s /a-d /b *.txt | gawk -F "\\" "{q=\"\x22\";if(match($NF,\"\\[[0-9]{2}\\]\",a))system(\"cmd /c ren\",q $NF q,q substr(a[0],2,2) \".txt\" q)}"
复制代码

TOP

本帖最后由 CrLf 于 2014-5-4 03:22 编辑

本来想贴个 powershell 方案的,但试了下这么简单的事竟然在 xp 和 win7 下都报错,什么原因?
  1. (Get-ChildItem -Recurse *.txt) -Match "\[\d\d\]" | Rename-Item -NewName {$_.name -replace '.*\[(\d\d)\].*','$1.txt'}
复制代码
测试中对 te[01]st.txt 报错如下,而改成匹配 te(01)st.txt 却能正确执行:
Rename-Item : 无法重命名,因为“te[01]st.txt”处不存在项。
......

再测试下最简单的 ReName-Item 'test.txt' 'test[0].txt' 同样会报错,这是 bug 还是另有什么隐晦的规矩?
百度不到,搞不明白咋回事,哪位知道的能否指点个?拜谢~

TOP

修改自 9 楼 apang 胸的代码:
  1. @set @n=0;/* & echo off
  2. if "%~1" == "" echo,请拖拽文件夹&pause&exit
  3. if not exist "%~1\" echo,请拖拽文件夹&pause&exit
  4. pushd "%~1\"
  5. for /f "delims=" %%a in ('dir/b/s *.txt^|findstr "\[[0-9][0-9]\][^\\]*$"^|cscript -nologo -e:jscript %0')do (
  6.     Ren %%a 2>nul
  7. )
  8. pause & exit/b */
  9. var text = WScript.StdIn.ReadAll().replace(/\r|\n$/g,'')
  10. WScript.Echo(text.replace(/^(.*?[^\\]*\[(\d{2})\][^\\]*)$/gm, '"$1" "$2.txt"'))
复制代码
代码会短一些,但可读性其实很差

TOP

同上,估计是楼主保存成 unicode 了吧?这么多代码不至于一个都不能用

TOP

回复 20# ZeronoFreya


    大哥,你得把 Ren 前的那个 echo 去掉,他那是为了显示出来让你看看是否正确,确认无误后去掉 echo 再进行实际的改名操作

TOP

回复 24# PakTC


    楼主要求有这一项:
(包含子文件夹)

TOP

返回列表