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

[文件操作] [已解决]批处理如何按照列表替换部分文件名?

本帖最后由 gddsssko 于 2024-6-9 08:44 编辑

例如
按照列表(可以是txt、xls等,也可以直接写入bat中,大佬咋方便咋来)
AAA      $aa1$
BB        $bb1$
CCCC    $cc2$
原文件夹名
  你好AAA你好
  大大AAA大大
  大大AAA大大AAA
  我好BB我好
  他好CCCC他好
替换后
  你好$aa1$你好
  大大$aa1$大大
  大大$aa1$大大$aa1$
  我好$bb1$我好
  他好$cc2$他好

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b *.xls') do (
  4. set a=%%i
  5. set b=!a:AAA=$aa1$!
  6. ren "%%i" !b!
  7. )
复制代码

TOP

本帖最后由 ppll2030 于 2024-3-4 00:25 编辑

回复 1# gddsssko


   
把代码保存为bat文件,文件编码为ANSI。
更名规则附在代码后面了。修改规则可从13行开始,中间用空格分割即可。
运行代码可查看更名结果,请认真核对,确认代码无误后,再修改bat文件,
把第7行 “echo.&echo” 删除并保存,在运行一次即可完成更名。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims= " %%i in ('more +12 "%~f0"') do (
  4. for /f "delims=" %%v in ('dir /b /s /ad "*%%i*"') do (
  5. set x=%%~nxv
  6. set x=!x:%%i=%%j!
  7. echo.&echo ren "%%v" "!x!"
  8. )
  9. )
  10. pause
  11. :更名规则
  12. AAA      $aa1$
  13. BB        $bb1$
  14. CCCC    $cc2$
复制代码

TOP


处理目录须注意》力求深层目录处理在前,否则其真实路径可能会被动态修改...
一般是用如下句式获取目录列表,即加持反向排序
   dir /b/s/ad|sort /r

TOP

回复 1# gddsssko

批处理脚本处理目录时避免踩雷》目标目录不能是当前目录,不能是加持保护权限的目录,不能包含子目录,否则系统会拒绝更名
代码中第2行假设被处理的目标目录的根目录均为 d:\test 可被楼主修改
如下代码存为test.bat
  1. @echo off &setlocal enabledelayedexpansion
  2. set/p "rootD=d:\test"
  3. for /f "delims=" %%D in ('dir /b/s/ad "%rootD%" ^|sort /r') do (
  4. set "d=%%~nxD" & for %%s in (
  5. "AAA/$aa1$"
  6. "BB/$bb1$"
  7. "CCCC/$cc2$"
  8. ) do for /f "tokens=1-2 delims=/" %%1 in ("%%~s") do if /i "!d!" neq "!d:%%1=!" (ren "%%~D" "!d:%%1=%%2!")
  9. )
  10. endlocal&exit/b
复制代码

TOP

回复 1# gddsssko

5楼代码中的5-7行替换词用/作分隔符,并用双引号包裹,以防替换词中包含空格和避免包含^(&)等特殊字符出错...

TOP

回复 2# semiuel
感谢大佬

TOP

回复 5# aloha20200628


    感谢大佬

TOP

回复 3# ppll2030


    感谢大佬

TOP

返回列表