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

[文件操作] 批处理怎样根据CSV对文件进行对比批量重命名?

[复制链接]
发表于 2019-12-11 15:26:55 | 显示全部楼层 |阅读模式
我这样写的,但是只能对当前目录下的文件生效,怎么让这个批处理对子目录的文件也能命名?
求大佬们帮忙修改一下。。。。。万分感谢!
  1. Set Path=D:\RenameTool\Rename.csv
  2. for /f "delims=" %%a in (%Path%) do (
  3.     for /f "tokens=1-2 delims=," %%a in ("%%a") do (
  4.         ren "%%~a" "%%~b"
  5.         echo %%~nxa 重命名为..... %%~nxb
  6.     )
  7. )
复制代码
另外如果该目录下没有CSV表里面的文件会提示没有找到文件,怎么关闭这个回显?没有文件就不执行重命名

感谢大佬帮忙解答!大佬年会中大奖!
发表于 2019-12-11 21:12:00 | 显示全部楼层
加个IF呢
  1. if exist "%%~a"  (
  2.    ren "%%~a" "%%~b"
  3.    echo %%~nxa 重命名为..... %%~nxb
  4. )
复制代码
 楼主| 发表于 2019-12-12 15:18:40 | 显示全部楼层
回复 2# terse


    万分感谢没有回显了,
大大还有个问题还请帮忙,就是我是拖拽整个文件夹到这个批处理上的,但是这个批处理只是读当前文件夹下的所有文件,并没有读子目录里面的文件,
该怎么改呢?还请赐教~
发表于 2019-12-12 16:15:43 | 显示全部楼层
回复 3# Macrae
这样试一下
  1. @echo off&setlocal enabledelayedexpansion
  2. if "%~1" == "" (set d=%~dp0) else set "d=%~1"
  3. Set Path=D:\RenameTool\Rename.csv
  4. for /f "delims=" %%a in (%Path%) do (
  5.     for /f "tokens=1-2 delims=," %%a in ("%%a") do (
  6.         ren "%d%%%~a" "%d%%%~b"
  7.         echo %d%%%~nxa 重命名为..... %d%%%~nxb
  8.     )
  9. )
复制代码
 楼主| 发表于 2019-12-12 16:36:12 | 显示全部楼层
回复 4# terse


    提示系统找不到指定文件
 楼主| 发表于 2019-12-12 17:14:18 | 显示全部楼层
回复 4# terse


我有个目录A,A目录下有10个文件夹,每个文件夹里面有需要命名的文件
拖动A目录到批处理上,提示系统找不到文件
发表于 2019-12-12 17:31:49 | 显示全部楼层
本帖最后由 terse 于 2019-12-12 17:39 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. if "%~1" == "" (set d=%~dp0) else set "d=%~1"
  3. Set Path=D:\RenameTool\Rename.csv
  4. for /f "delims=" %%a in (%Path%) do (
  5.      for /f "tokens=1-2 delims=," %%a in ("%%a") do (
  6.           for /f "tokens=*" %%d in ('dir /b/s/ad "%d%"') do (
  7.                if exist "%%d\%%~a"  (
  8.                   ren "%%d\%%~a" "%%d\%%~b"
  9.                   echo %%d\%%~nxa 重命名为..... %%d\%%~nxb
  10.               )
  11.          )
  12.      )
  13. )
复制代码
 楼主| 发表于 2019-12-13 10:45:01 | 显示全部楼层
回复 7# terse


    提示语法错误?
发表于 2019-12-13 13:09:24 | 显示全部楼层
回复 8# Macrae

ren "%%d\%%~a" "%%d\%%~b" 前面加上 ECHO 看显示什么结果
发表于 2019-12-13 13:13:48 | 显示全部楼层
回复  terse
    提示语法错误?
Macrae 发表于 2019-12-13 10:45


因为按你上面代码改的 没测试 靠你反馈了
 楼主| 发表于 2019-12-13 14:33:44 | 显示全部楼层
回复 10# terse


    echo "%%d\%%~a" "%%d\%%~b"
这个是正常的
ren "%%d\%%~a" "%%d\%%~b"
提示命令语法错误

似乎 ren 不支持带路径的值输入?
发表于 2019-12-13 16:17:33 | 显示全部楼层
回复 11# Macrae


    Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\user>ren /?
重命名文件。

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

请注意,您不能为目标文件指定新的驱动器或路径。

C:\Users\user>
发表于 2019-12-13 16:23:04 | 显示全部楼层
回复 11# Macrae


        path不要用来做变量名(和系统环境变量冲突)。
发表于 2019-12-13 16:59:43 | 显示全部楼层
回复 11# Macrae
去掉后面路径
  1. ren "%%d\%%~a" “%%~b"
复制代码
 楼主| 发表于 2019-12-13 18:35:41 | 显示全部楼层
本帖最后由 Macrae 于 2019-12-14 10:04 编辑

回复 14# terse
回复 12# Gin_Q

感谢两位大大的帮忙,已经成功运行了!
以下是最后的代码

回复 12# Gin_Q
  1. @echo off&setlocal enabledelayedexpansion
  2. Set CSV=D:\RenameTool\FrameRename.csv
  3. set /a num=0
  4. for /f "delims=" %%a in (%CSV%) do (
  5.     for /f "tokens=1-2 delims=," %%a in ("%%a") do (
  6.         for /f "tokens=*" %%d in ('dir /b/s/ad "%d%"') do (
  7.             if exist "%%d\%%~a" (
  8.                 ren "%%d\%%~a" "%%~b"
  9.                 Set /a num+=1
  10.                 echo %%~nxa Rename to %%~b
  11.             )
  12.          )
  13.      )
  14. )
  15. echo %num% Files Rename Successful !!!!
  16. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 13:31 , Processed in 0.018130 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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