找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20560|回复: 7

[文本处理] [已解决]批处理从两个文件中读取变量,先运行第一个变量,遍历第二个文件的全部变量

[复制链接]
发表于 2023-9-8 14:56:28 | 显示全部楼层 |阅读模式
本帖最后由 thp2008 于 2023-9-8 17:21 编辑

比如
MVName.txt
XX电影.www.xxx.com.
NN.影视.www.abc.com.
......

FileLX.txt
*.mp4
*.mkv
.....
  1. for /f "delims=" %%a in ('type "MVName.txt"') do (set oldname=%%a)
  2. for /f "delims=" %%b in ('type "FileLX.txt"') do (set wildcard=%%b)
  3. newname 设置为空值。
复制代码
我是想用下面的批量改名批处理,但想自动从上面两个文本文件读取变量,就是我从MVName.txt中读取第一行后,将FileLX.txt中所有行,都运行一遍。然后,再从MVName.txt读取第二行,再将FileLX.txt 的所有行,都跑一遍,这个应该怎么写?
  1. @echo off
  2. setlocal

  3. set /p oldname=请输入批量改名中需要更换的重复部分:
  4. set newname=
  5. set /p wildcard=请输入文件名通配符列表(缺省为所有文件,即“*”):

  6. for /f "usebackq delims=" %%i in (`dir /s/b/a-d %wildcard%`) do (
  7. setlocal enabledelayedexpansion

  8. set var=%%~nxi
  9. set "var=!var:%oldname%=%newname%!"

  10. if not "%%~nxi"=="!var!" (echo 正在改名:"%%i" =》 "!var!")
  11. echo %%i |find "mutiren.bat" >nul || ren "%%i" "!var!" >nul

  12. endlocal
  13. )

  14. endlocal
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-9-8 15:49:16 | 显示全部楼层
  1. MVName.txt
  2. XX电影.www.xxx.com.
  3. NN.影视.www.abc.com.
  4. ......

  5. FileLX.txt
  6. *.mp4
  7. *.mkv
  8. .....
复制代码


要怎么改?
发表于 2023-9-8 15:56:53 | 显示全部楼层
不要说一半藏一半,说说具体需求。不一定非要在你提供的代码上修改。
发表于 2023-9-8 16:05:42 | 显示全部楼层
回复 1# thp2008
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%i in ('type "FileLX.txt"') do (
  4.     for /f "delims=" %%j in ('dir /b /s /a-d %%i 2^>nul') do (
  5.         for /f "delims=" %%k in ('type "MVName.txt"') do (
  6.             set "OldFull=%%j"
  7.             set "OldName=%%~nxj"
  8.             setlocal enabledelayedexpansion
  9.             set NewName=!OldName:%%k=!
  10.             if "!OldName!" neq "!NewName!" (
  11.                 ren "!OldFull!" "!NewName!"
  12.             )
  13.             endlocal
  14.         )
  15.     )
  16. )
复制代码

评分

参与人数 1技术 +1 收起 理由
thp2008 + 1 老大真牛,一下子就解决了。测试没问题。

查看全部评分

 楼主| 发表于 2023-9-8 17:19:13 | 显示全部楼层
不要说一半藏一半,说说具体需求。不一定非要在你提供的代码上修改。
qixiaobin0715 发表于 2023-9-8 15:56


不好意思,可能我表述的不是很清楚。
 楼主| 发表于 2023-9-8 17:20:54 | 显示全部楼层
有个细节,需要注意,由于MVName.txt中,有中文字符,所以一定保存为ANSI,不然会不改名。刚开始测试时,没反应,后来我发现是这个问题。
 楼主| 发表于 2023-9-8 17:47:42 | 显示全部楼层
  1. set NewName=!OldName:%%k=!
复制代码
我再想请教一下,如果在4楼的这个代码中,上面这句,表示,新文件名=旧文件名去除%%k

如果我想给文件名加上%%k 该如何表示。也就是我想给所有的文件名前面加上%%k这个变量。
发表于 2023-9-10 18:26:43 | 显示全部楼层
回复 7# thp2008
  1. set "NewName=%%k!OldName!"
复制代码

评分

参与人数 1技术 +1 收起 理由
thp2008 + 1 谢谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 13:18 , Processed in 0.021325 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表