Board logo

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

作者: thp2008    时间: 2023-9-8 14:56     标题: [已解决]批处理从两个文件中读取变量,先运行第一个变量,遍历第二个文件的全部变量

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

作者: 77七    时间: 2023-9-8 15:49

  1. MVName.txt
  2. XX电影.www.xxx.com.
  3. NN.影视.www.abc.com.
  4. ......
  5. FileLX.txt
  6. *.mp4
  7. *.mkv
  8. .....
复制代码


要怎么改?
作者: qixiaobin0715    时间: 2023-9-8 15:56

不要说一半藏一半,说说具体需求。不一定非要在你提供的代码上修改。
作者: Batcher    时间: 2023-9-8 16:05

回复 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. )
复制代码

作者: thp2008    时间: 2023-9-8 17:19

不要说一半藏一半,说说具体需求。不一定非要在你提供的代码上修改。
qixiaobin0715 发表于 2023-9-8 15:56


不好意思,可能我表述的不是很清楚。
作者: thp2008    时间: 2023-9-8 17:20

有个细节,需要注意,由于MVName.txt中,有中文字符,所以一定保存为ANSI,不然会不改名。刚开始测试时,没反应,后来我发现是这个问题。
作者: thp2008    时间: 2023-9-8 17:47

  1. set NewName=!OldName:%%k=!
复制代码
我再想请教一下,如果在4楼的这个代码中,上面这句,表示,新文件名=旧文件名去除%%k

如果我想给文件名加上%%k 该如何表示。也就是我想给所有的文件名前面加上%%k这个变量。
作者: Batcher    时间: 2023-9-10 18:26

回复 7# thp2008
  1. set "NewName=%%k!OldName!"
复制代码





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