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

[文本处理] 按列表txt重命名文件的批处理不成功,请高手指正,谢谢!

按文件名列表new_filenames.txt重命名当前目录及其子目录下所有文件的文件名,均不成功,请高手指正,谢谢!

文件列表new_filenames.txt中的文件名无论写成:
新文件名1.pdf
新文件名2.pdf
......
还是写成:
新文件名1.pdf,旧文件名.jpg
新文件名2.pdf,旧文件名.jpg
......

代码①和代码②都不能实现重命名
-------------------------------------------
代码②:
代码无效,没有执行如何操作
  1. @echo off
  2. chcp 65001
  3. cd /d "%~dp0"
  4. setlocal enabledelayedexpansion
  5. :: 假设我们要处理当前目录下的所有文件
  6. for %%F in (*) do (
  7.     set "filename=%%~nxF"
  8.     echo 文件名: !filename!
  9.     REM 在这里可以使用变量"filename"
  10.     setlocal enabledelayedexpansion
  11.     for /f "tokens=1,* delims=" %%a in ("new_filenames.txt") do (
  12.          rem 检查 %%a 是否对应 !filename!,以避免重命名错误
  13.          if "%%~a"=="!filename!" (
  14.              ren "!filename!" "%%b"
  15.          )
  16.     )
  17.     endlocal
  18. )
  19. endlocal
  20. pause
复制代码
--------------------------------------------------------------
代码①:
rem 文件名列表放在其它当前目录(bat同目录)重命名就不成功
  1. @echo off
  2. chcp 65001
  3. cd /d "%~dp0"
  4. setlocal enabledelayedexpansion
  5. :: 假设我们要处理当前目录下的所有文件
  6. for %%F in (*) do (
  7.     set "filename=%%~nxF"
  8.     echo 文件名: !filename!
  9.     REM 在这里可以使用变量"filename"
  10.     setlocal enabledelayedexpansion
  11.     cd /d "%~dp0"
  12.     for /f "tokens=1,* delims=" %%a in (new_filenames.txt) do (
  13.          set "filen=%%a"
  14.          ren "!filen!" "!filename!"
  15.     )
  16. )
  17. endlocal
  18. pause
复制代码

[quote][/quote] 感谢二位高手的回复,辛苦了!谢谢!
2楼77七 代码需要添加一行,在第二个for语句后面添加 echo, "%%i"一行,就实现该功能。
3楼代码也非常不错的。

TOP

回复 2# 77七
感谢高手的回复,辛苦了!谢谢!
2楼77七 代码需要添加一行,在第二个for语句后面添加 echo, "%%i"一行,你可测试一下。

TOP

回复 3# Five66

[quote][/quote] 感谢二位高手的回复,辛苦了!谢谢!
3楼代码也非常不错的。一次成功。

TOP

返回列表