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

[文件操作] [已解决]批处理怎样提取目录名中括号内的字符串并以该字符串重命名目录下所有文件?

本帖最后由 pcl_test 于 2016-7-22 19:45 编辑

想求个好用的批处理,找高手。

我有一些目录是这样:     (AA55)中国风
里面有一些文件都是随机名字,比如:456487A789.jpg

想通过批处理,提取目录名中括号内的内容AA55,将目录中的文件修改成这个提取的名字,也就是改为AA55.jpg

请教高手指导。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

你没说修改哪些文件啊
哪个文件要改为AA55?

TOP

举例:
目录是:(AA55)中国风
目录中有两个文件,名字是不规则的,比如:789.jpg,abd.png。

这些文件的扩展名都不同,现在要将目录中的所有文件都改为:目录名的括号内的文字。改完后,文件名应该是这样:AA55.jpg             AA55.png

TOP

假设文件夹“(AA55)中国风”位于 C:\test\ 目录下面
请把这个批处理也放在 C:\test\ 目录下面
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /ad ^| findstr "(.*)"') do (
  4.     for /f "tokens=2 delims=()" %%j in ("%%i") do (
  5.         set str=%%j
  6.     )
  7.     for /f "delims=" %%k in ('dir /b /a-d "%%i"') do (
  8.         ren "%%i\%%k" "!str!%%~xk"
  9.     )
  10. )
复制代码
1

评分人数

    • go3up: 乐于助人技术 + 1

TOP

DAIC你好,谢谢你提供的方案啊,不过执行结果和我的要求有偏差,可能我没说清楚。

目录名:(AA55)中国风。
里面的文件是789.jpg,abd.png。
改名后,要达到的效果是:AA55.jpg,AA55.png
也就是说,要提取括号内的文本AA55,并用这个来命名目录内的文件。

麻烦您再帮我看看,需要如何修改,非常感谢。

TOP

回复 5# go3up


    具体的偏差是什么?

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /ad ^| findstr "(.*)"') do (
  4.     for /f "delims=()" %%j in ("%%i") do (
  5.         set str=%%j
  6.     )
  7.     for /f "delims=" %%k in ('dir /b /a-d "%%i"') do (
  8.         ren "%%i\%%k" "!str!%%~xk"
  9.     )
  10. )
复制代码

TOP

啊,回复真快,谢谢DAIC,您真心是个高手。这个问题都困扰了我好久了。现在一层目录已经有效了。

能再麻烦您一下么,当此类目录有多层的时候,如何实现多层修改?

目录:(AA55)中国风
    |
    |---- (BB66)女歌手
        |
        |---- 456.jpg      666.png

能否在第一层目录:(AA55)中国风  里,执行一次批处理,就能将下层子目录的文件也改为符合规律的文字呢?以这个例子来说,就是改为BB66.jpg了

TOP

还有,如果不是圆括号,而是:[    ]       这样的直括号,要怎么修改呢?您有QQ么,能否直接加一下。
我的QQ:33401780

TOP

我还有一些目录是:[STD-105]南城项目。里面的文件也是要改成直括号内的文字。我修改了一下你发的脚本:    for /f "delims=[]" %%j in ("%%i") do        但是没成功。

方便的话,加我的QQ吧:33401780,麻烦您了。

TOP

回复 8# go3up
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /ad ^| findstr "(.*)"') do (
  4.     REM Level one folder
  5.     for /f "delims=()" %%j in ("%%i") do (
  6.         set strLevelOne=%%j
  7.     )
  8.     for /f "delims=" %%k in ('dir /b /a-d "%%i"') do (
  9.         ren "%%i\%%k" "!strLevelOne!%%~xk"
  10.     )
  11.     REM Level two folder
  12.     for /f "delims=" %%l in ('dir /b /ad "%%i" ^| findstr "(.*)"') do (
  13.         for /f "delims=()" %%m in ("%%l") do (
  14.             set strLevelTwo=%%m
  15.         )
  16.         for /f "delims=" %%n in ('dir /b /a-d "%%i\%%l"') do (
  17.             ren "%%i\%%l\%%n" "!strLevelTwo!%%~xn"
  18.         )
  19.     )
  20. )
复制代码
1

评分人数

    • go3up: 乐于助人技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 10# go3up


除了delims要改,findstr也要改。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /ad ^| findstr "\[.*\]"') do (
  4.     for /f "delims=[]" %%j in ("%%i") do (
  5.         set str=%%j
  6.     )
  7.     for /f "delims=" %%k in ('dir /b /a-d "%%i"') do (
  8.         ren "%%i\%%k" "!str!%%~xk"
  9.     )
  10. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢,Batcher,双层目录的问题解决了。顺便问一下,只能每加一层目录,就多一段代码么?没有自动循环递归的方法么?

另外,10楼的时候我问的那个问题,也麻烦您指教一下:就是目录名为方括号的,应该如何修改代码呢?

[STD-105]南城项目     这样的目录名。需求是一样的,用方括号内的文字,修改目录内的文件名。

TOP

太感谢了,虽然还没完全吃透,但套用您提供的这个脚本,我的工作已经能先做了。等有闲我再好好研究一下语句的内容,争取也能自己写出这样的代码。

谢谢两位大侠的帮助!

TOP

回复 14# go3up


    问题解决后,请编辑顶楼帖子在标题前面注明[已解决],并给回答者加分。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表