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

[文件操作] 求助批处理多轮遍历文件【匹配自定义关键词】改名【前缀自定义英文】

求助高手:多轮遍历文件【匹配自定义关键词】搜索改名【前缀自定义英文】
旧文件名=房屋建筑理论.url,房屋建筑规范.url,,,城市规划设计.url,城市规划方法.url,,,庭院景观教学.url,公园景观教学.url。。。。
自定义匹配关键词=建筑,规划,景观。。。。
前缀改名后=a建筑,b规划,c景观。。。。
新文件名=房屋a建筑理论.url,房屋a建筑规范.url,,,城市b规划设计.url,城市b规划方法.url,,,庭院c景观教学.url,公园c景观教学.url。。。。

网上抄到一个单轮遍历文件自定义搜索改名的操作,我想实现预定多轮自定义改名,提高改名效率,谢谢各位大神!!!
  1. title 批量替换【子~件名】
  2. echo 此批处理可批量替换本文件所在文件夹下所有文件【子~件名】。
  3. echo.
  4. set /p str1= 请输入要替换的【子~件名】字符串(可替换空格):
  5. set /p str2= 请输入替换后的【子~件名】字符串(去除则直接回车):
  6. echo.
  7. echo 正在替换文件【子~件名】……
  8. for /f "delims=" %%a in ('dir /b  /a-d') do (
  9.    if "%%~nxa" neq "%~nx0" (
  10.       set "file=%%a"
  11.       set "name=%%~na"
  12.       set "extension=%%~xa"
  13.       call set "name=%%name:%str1%=%str2%%%"
  14.       ren "!file!" "!name!!extension!" 2>nul
  15.    )
  16. )
复制代码
其他思考
  1. set "key_list=%key_list%建筑;"
  2. set "key_list=%key_list%规划;"
  3. set "key_list=%key_list%景观;"
  4. set "key_list="%key_list:~0,-1%""
  5.     for %%i in (%key_list:;=";"%) do (。。。)
复制代码

回复 14# qixiaobin0715


    谢谢谢谢,我之前上传文件失败就没再传了。。。

TOP

本帖最后由 qixiaobin0715 于 2022-3-25 15:11 编辑

回复 12# youxianwei
+号应当没什么问题吧?
前两天就要你上传附件,你不说也不传。只能自己测试了。
如果有百分号就加倍,每个部分用引号分隔。试试吧。
7楼代码已修改。


好像不行。建议使用10楼的代码。

7楼代码已还原。

TOP

回复 9# youxianwei


如需上传截图,请用图床:
http://bbs.bathome.net/thread-60985-1-1.html

如需上传附件,请用阿里云盘或百度网盘。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 11# youxianwei


    高手您好,我实践发现有几个特殊字符无法运行,+,=,%,请问该如何写入var?谢谢,感谢

TOP

回复 10# qixiaobin0715


    好的,谢谢您,我测试了半天,好像bat的代码分行输入最多分五行,再多就失灵了。

TOP

回复 9# youxianwei
这样啊。那就简单点。
把关键词一个一行保存为keywords.txt,格式如下:
  1. (1) 建筑
  2. (1) 规划
  3. (2) 景观
  4. (2) 庭院
  5. (3) 室内
  6. ....
复制代码
将上面所有有关文件都放在同一个文件夹中,运行以下代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1*" %%a in (keywords.txt) do (
  4.     for /f "delims=" %%i in ('dir /b /a-d *%%b*.url') do (
  5.         set str=%%i
  6.         ren "%%i" "!str:%%b=%%a%%b!"
  7.     )
  8. )
复制代码

TOP

本帖最后由 youxianwei 于 2022-3-22 13:39 编辑

回复 3# qixiaobin0715


高手您好,测试了一下,出现了个奇怪现象,

我想设定更多关键词,var代码太长,于是用^分行,但第六行以后的关键词程序就不识别了,请问如何解决这个问题呀?

set var=建筑.⑴  规划.⑴       ^
        景观.⑵  庭院.⑵          ^
        室内.⑶                ^
        风景.⑷               ^
        高效.⑸               ^   
        东西.⑹              ^         
        第七行关键词.⑺              ^      rem 为什么第七行开始就不识别了呢???        
        第八行关键词.⑻             ^

稍等上传测试文件,奇怪为什么上传失败??

TOP

回复 7# qixiaobin0715


    谢谢,感谢您的专研精神!

TOP

本帖最后由 qixiaobin0715 于 2022-3-25 15:13 编辑

回复 6# youxianwei
下面代码应当可以保留文件名中的点号,牺牲一点点效率,可以试试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set var=建筑.a 规划.b 景观.c
  4. for %%a in (%var%) do (
  5.     for /f "delims=" %%i in ('dir /b /a-d "*%%~na*.url"') do (
  6.         set str=%%~ni
  7.         set str=!str:.=:!
  8.         set str=!str:%%~na=%%~xa%%~na!
  9.         set str=!str:.=!
  10.         ren "%%i" "!str::=.!%%~xi"
  11.     )
  12. )
  13. pause
复制代码

TOP

本帖最后由 youxianwei 于 2022-3-22 10:48 编辑

回复 3# qixiaobin0715


    高手您好,请问为什么不能有小数点?,我的确发现会把原文件名中的【.】去除,还好影响不大。

TOP

回复 2# Batcher


       感谢!感谢!

TOP

回复 3# qixiaobin0715


   感谢!感谢!

TOP

本帖最后由 qixiaobin0715 于 2022-3-21 16:54 编辑

适用范围,文件名中不存在字符点(.)。可按照变量%var%值的格式自主添加关键词,未测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set var=建筑.a 规划.b 景观.c
  4. for %%a in (%var%) do (
  5.     for /f "delims=" %%i in ('dir /b /a-d *%%~na*.url') do (
  6.         set str=%%~ni
  7.         set str=!str:%%~na=%%~xa%%~na!
  8.         ren "%%i" "!str:.=!%%~xi"
  9.     )
  10. )
  11. pause
复制代码

TOP

回复 1# youxianwei
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. set "OldStr1=建筑"
  5. set "NewStr1=a建筑"
  6. set "OldStr2=规划"
  7. set "NewStr2=b规划"
  8. set "OldStr3=景观"
  9. set "NewStr3=c景观"
  10. for /f "delims=" %%a in ('dir /b /a-d ^| findstr /v /x "%~nx0"') do (
  11.     set "name=%%~na"
  12.     set "name=!name:%OldStr1%=%NewStr1%!"
  13.     set "name=!name:%OldStr2%=%NewStr2%!"
  14.     set "name=!name:%OldStr3%=%NewStr3%!"
  15.     ren "%%a" "!name!%%~xa"
  16. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表