Board logo

标题: [文本处理] 求助批处理用A文件夹中的文件名去重命名B文件夹中的文件名 [打印本页]

作者: WBATW    时间: 2024-4-23 00:40     标题: 求助批处理用A文件夹中的文件名去重命名B文件夹中的文件名

用A文件夹中的文件名去重命名B文件夹中的文件名,按文件名一对一对应关系重命名
A、B文件夹在当前目录,且其中的文件数目相等(扩展名可能不一样)。示例代码如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "folderA=A"
  4. set "folderB=B"
  5. for %%a in ("!folderA!\*.*") do (
  6.     set "filename=%%~nxa"
  7.     if exist "!folderB!" (
  8.         for %%b in ("!folderB!\*.*") do (
  9.             set "newname=%%~b" rem 【%%~b】不能写成【%%~nxb】
  10.             ren "!newname!" "!filename!"
  11.         )
  12.     ) else (
  13.         echo 文件不存在: "!folderB!\!newname!*"
  14.     )
  15. )
  16. endlocal
  17. PAUSE
复制代码
------------------

运行上述示例代码存在以下问题:
1、A文件夹的文件名有序号(测试时在文件名末尾),B文件夹的没有,可正常重命名;
2、B文件夹的文件名有序号(测试时在文件名末尾),A文件夹的没有,不能正常重命名;
3、B文件夹的文件名有序号(测试时在文件名首),A文件夹的文件名没有序号,可正常重命名;
4、文件名空格、大小写问题;

我希望修改上述示例代码,使其能在通常情况下的文件名(特殊字符除外)能够正常执行操作。即,A文件夹中的文件名一对一B文件夹中的文件名、按对应关系对应B文件夹的文件名重命名。谢谢 !
作者: 77七    时间: 2024-4-23 11:46

本帖最后由 77七 于 2024-4-23 11:54 编辑
  1. @echo off
  2. set fa=a
  3. set fb=b
  4. cd /d "%~dp0"
  5. setlocal enabledelayedexpansion
  6. for %%a in ("%fa%\*") do (
  7. set /a n+=1
  8. set #!n!=%%~nxa
  9. )
  10. for /f "delims=" %%a in ('dir /b /a-d "%fb%\*"') do (
  11. set /a m+=1
  12. call ren "%fb%\%%a" "%%#!m!%%"
  13. )
  14. endlocal
  15. pause
复制代码





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