找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25264|回复: 1

[文本处理] 求助批处理用A文件夹中的文件名去重命名B文件夹中的文件名

[复制链接]
发表于 2024-4-23 00:40:51 | 显示全部楼层 |阅读模式
用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文件夹的文件名重命名。谢谢 !
发表于 2024-4-23 11:46:14 | 显示全部楼层
本帖最后由 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:57 , Processed in 0.017654 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表