标题: [文本处理] 按列表txt重命名文件的批处理不成功,请高手指正,谢谢! [打印本页]
作者: WBATW 时间: 2024-4-1 19:38 标题: 按列表txt重命名文件的批处理不成功,请高手指正,谢谢!
按文件名列表new_filenames.txt重命名当前目录及其子目录下所有文件的文件名,均不成功,请高手指正,谢谢!
文件列表new_filenames.txt中的文件名无论写成:
新文件名1.pdf
新文件名2.pdf
......
还是写成:
新文件名1.pdf,旧文件名.jpg
新文件名2.pdf,旧文件名.jpg
......
代码①和代码②都不能实现重命名
-------------------------------------------
代码②:
代码无效,没有执行如何操作- @echo off
- chcp 65001
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- :: 假设我们要处理当前目录下的所有文件
- for %%F in (*) do (
- set "filename=%%~nxF"
- echo 文件名: !filename!
- REM 在这里可以使用变量"filename"
- setlocal enabledelayedexpansion
- for /f "tokens=1,* delims=" %%a in ("new_filenames.txt") do (
- rem 检查 %%a 是否对应 !filename!,以避免重命名错误
- if "%%~a"=="!filename!" (
- ren "!filename!" "%%b"
- )
- )
- endlocal
- )
- endlocal
- pause
复制代码
--------------------------------------------------------------
代码①:
rem 文件名列表放在其它当前目录(bat同目录)重命名就不成功- @echo off
- chcp 65001
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
-
- :: 假设我们要处理当前目录下的所有文件
- for %%F in (*) do (
- set "filename=%%~nxF"
- echo 文件名: !filename!
- REM 在这里可以使用变量"filename"
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- for /f "tokens=1,* delims=" %%a in (new_filenames.txt) do (
- set "filen=%%a"
- ren "!filen!" "!filename!"
- )
- )
- endlocal
- pause
复制代码
作者: 77七 时间: 2024-4-1 21:15
- @echo off
- rem 批处理和文本全部保存为ansi编码格式
- for /f "useback tokens=1-2 delims=," %%a in ("1.txt") do (
- for /r %%i in (%%a?) do (
- if "%%~nxi" equ "%%a" (
- ren "%%i" "%%b"
- )
- )
- )
- pause
- exit
- 1.txt 格式
- 旧文件名,新文件名
- a.txt,b.txt
复制代码
作者: Five66 时间: 2024-4-1 21:41
编码全部保存成ansi
新旧文件名用英文?分割
例如:
新文件名1.pdf?旧文件名.jpg
新文件名2.pdf ? 旧文件名.jpg- @echo off&pause
-
- for /f "usebackq eol=/ tokens=1,2,3 delims=?" %%a in ("new_filenames.txt") do (
- setlocal
- set _@new=%%a
- set _@old=%%b
- if "%%c" neq "" set _@old=
-
- if defined _@old (
-
- setlocal enabledelayedexpansion
- if "!_@new:~0,1!" == " " (
- for /f "tokens=1,* delims= " %%x in ("?!_@new!") do endlocal&set _@new=%%~y
- ) else endlocal
-
- setlocal enabledelayedexpansion
- if "!_@old:~0,1!" == " " (
- for /f "tokens=1,* delims= " %%x in ("?!_@old!") do endlocal&set _@old=%%~y
- ) else endlocal
-
- setlocal enabledelayedexpansion
- for %%z in ("!_@new!") do endlocal&set _@new=%%~nxz
-
- setlocal enabledelayedexpansion
- for %%z in ("!_@old!") do endlocal&set _@old=%%~nxz
-
- setlocal enabledelayedexpansion
- if exist "!_@old!" (
- if not exist "!_@new!" (
- echo rename "!_@old!" to "!_@new!"
- rename "!_@old!" "!_@new!"
- ) else (echo 存在跟新文件名"!_@new!"同名的文件 : 不处理
- )
- ) else (echo 警告 : 需要改名的文件"!_@old!"不存在
- )
- endlocal
-
- ) else ( call echo 错误 : 当前行格式不正确
- )
- endlocal
- )
- pause
复制代码
作者: WBATW 时间: 2024-4-3 02:21
[quote][/quote] 感谢二位高手的回复,辛苦了!谢谢!
2楼77七 代码需要添加一行,在第二个for语句后面添加 echo, "%%i"一行,就实现该功能。
3楼代码也非常不错的。
作者: WBATW 时间: 2024-4-3 02:32
回复 2# 77七
感谢高手的回复,辛苦了!谢谢!
2楼77七 代码需要添加一行,在第二个for语句后面添加 echo, "%%i"一行,你可测试一下。
作者: WBATW 时间: 2024-4-3 02:37
回复 3# Five66
[quote][/quote] 感谢二位高手的回复,辛苦了!谢谢!
3楼代码也非常不错的。一次成功。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |