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

[文件操作] BAT脚本怎样批量修改文件夹内及其目录下所有文件的文件名?

rt,新手求助
目前想按照关键字批量修改文件名,搜索之后写了如下代码,但是执行后没有反应,求助各位帮忙看看
  1. @echo off
  2. set "str1=26"
  3. set "str2=28"
  4. Setlocal Enabledelayedexpansion
  5. for /r "D:\A-相关无用文件备份\20231226\- 模板备份1228" %%j in (*) do (
  6. for /f "delims=" %%i in ('dir /b *.*') do (
  7. set "var=%%i" & ren "%%i" "!var:%str1%=%str2%! "))
  8. pause
复制代码

回复 8# qixiaobin0715


    成功了!感谢解答!!!

TOP

本帖最后由 qixiaobin0715 于 2024-1-10 10:25 编辑

文件夹也要修改?
  1. @echo off
  2. set "str1=26"
  3. set "str2=28"
  4. cd /d "D:\A-相关无用文件备份\20231226\- 模板备份1228"
  5. Setlocal Enabledelayedexpansion
  6. for /f "delims=" %%i in ('dir /s /b "*%str1%*"^|sort /r') do (
  7. set "var=%%~nxi"
  8. ren "%%i" "!var:%str1%=%str2%!"
  9. )
复制代码

TOP

回复 4# _avatar_


    我试了下统一变量为i,也没成功ORZ。另外我是想要遍历指定文件夹下的所有文件和文件夹,不指定格式地修改名称,所以用了r,想实现for的嵌套,但是出现了问题,没有效果。

TOP

回复 2# Five66


   感谢回复! 这个我试了下可实现指定文件夹下的文件及文件夹名修改,但无法遍历文件夹,以及所有的文件夹和文件前会增加一个%dpi,删除dpi之后,所有的文件夹和文件前会增加一个%,后续怎么修改我再看看。

TOP

回复 3# qixiaobin0715

感谢解答!这个我试了下可以实现指定文件夹下所有文件的文件名关键词修改,但是不会修改文件夹下文件夹的名称,极大程度上解决了我的问题!我再研究下怎么修改文件夹名称。

TOP

回复 1# Emy


    你声明的变量是 j ,用的却是 i,这才是没有反应的最主要原因吧。

其实如果你要修改指定文件夹下的指定文件,就假定是当前目录就好了,这样你就不需要 /R 参数了。
如果单纯只是想要修改指定规则的文件,我觉得你应该要知道怎么正确匹配到你想要修改的文件。

比如你要修改所有记事本文件,小括号里就写 *.txt 。
要修改所有2023开头的图片,小括号里就写  2023*.jpg

TOP

本帖最后由 qixiaobin0715 于 2023-12-28 14:45 编辑

下面代码保存为ANSI编码运行:
  1. @echo off
  2. set "str1=26"
  3. set "str2=28"
  4. cd /d "D:\A-相关无用文件备份\20231226\- 模板备份1228"
  5. Setlocal Enabledelayedexpansion
  6. for /f "delims=" %%i in ('dir /s /b /a-d "*%str1%*"') do (
  7. set "var=%%~nxi"
  8. ren "%%i" "!var:%str1%=%str2%!"
  9. )
复制代码

TOP

这样行不?
  1. @echo off
  2. set "str1=26"
  3. set "str2=28"
  4. Setlocal Enabledelayedexpansion
  5. for /f "eol=/ delims=" %%i in ('dir /b "D:\A-相关无用文件备份\20231226\- 模板备份1228\*.*"') do (
  6. set "var=%%i" && ren "%%~fi" "%%dpi!var:%str1%=%str2%!")
  7. pause
复制代码

TOP

返回列表