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

[文本处理] 求助批处理用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: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
复制代码
bat小白,请多指教!谢谢!

TOP

返回列表