Board logo

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

作者: youxianwei    时间: 2022-9-25 06:45     标题: 为何批处理加/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!"
)
作者: hfxiang    时间: 2022-9-25 07:43

本帖最后由 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. )
复制代码

作者: qixiaobin0715    时间: 2022-9-25 08:43

本帖最后由 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. )
复制代码

作者: youxianwei    时间: 2022-9-25 16:06

回复 3# qixiaobin0715


    感谢大神相助!代码经测好用!
作者: youxianwei    时间: 2022-9-25 16:09

回复 2# hfxiang


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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2