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

[文件操作] 为何批处理加/s为何不能实现子孙件名【相似词】替换成【同一词】?

大神求助!以下代码为何加/s为何不能实现子孙件名【相似词】替换成【同一词】?
@echo off
set key=降低 减少 减弱
setlocal enabledelayedexpansion
cd /d "%~dp0"
for /f "delims=" %%i in ('dir /b 【/s】 /a-d ^| findstr /i "%key%" ^| findstr /v /x "%~nx0"') do (
    set "NewName=%%i"
    for %%a in (%key%) do (
        set NewName=!NewName:%%a=↘!
    )
    ren "%%i" "!NewName!"
)

回复 2# hfxiang


    谢谢帮助,代码经测试文件名的关键词没被修改

TOP

回复 3# qixiaobin0715


    感谢大神相助!代码经测好用!

TOP

本帖最后由 qixiaobin0715 于 2022-9-25 09:04 编辑

ren命令中,原文件名(前面部分)需要带路径(除非文件在当前目录中),新文件名(后面部分)只是你要修改的文件名,不能带路径。
顶楼代码管道命令太多,会降低代码运行效率。你不会连批处理文件名也非要起名含有“降低 减少 减弱”之类的吧,试试下面代码:
  1. @echo off
  2. set key=降低 减少 减弱
  3. setlocal enabledelayedexpansion
  4. for %%a in (%key%) do set var=!var! *%%a*
  5. cd /d "%~dp0"
  6. for /f "delims=" %%i in ('dir /b /s /a-d %var%') do (
  7.     set "NewName=%%~nxi"
  8.     for %%a in (%key%) do (
  9.         set NewName=!NewName:%%a=↘!
  10.     )
  11.     ren "%%i" "!NewName!"
  12. )
复制代码

TOP

本帖最后由 hfxiang 于 2022-9-25 08:48 编辑

无测试大环境,故未经测试
  1. @echo off
  2. set key = 降低 减少 减弱
  3. setlocal enabledelayedexpansion
  4. cd /d "%~dp0"
  5. for /f "delims=" %%i in ('dir /b /s /a-d ^| findstr /i "%key%" ^| findstr /v /x "%~nx0"') do (
  6.     set "NewName=%%~ni"
  7.     for %%a in (%key%) do (
  8.         set NewName=!NewName:%%a=↘!
  9. set NewName=%%~dpi!NewName!%%~xi
  10.     )
  11.     move /y "%%~fi" "!NewName!"
  12. )
复制代码

TOP

返回列表