Board logo

标题: [文件操作] 批处理怎样根据CSV对文件进行对比批量重命名? [打印本页]

作者: Macrae    时间: 2019-12-11 15:26     标题: 批处理怎样根据CSV对文件进行对比批量重命名?

我这样写的,但是只能对当前目录下的文件生效,怎么让这个批处理对子目录的文件也能命名?
求大佬们帮忙修改一下。。。。。万分感谢!
  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表里面的文件会提示没有找到文件,怎么关闭这个回显?没有文件就不执行重命名

感谢大佬帮忙解答!大佬年会中大奖!
作者: terse    时间: 2019-12-11 21:12

加个IF呢
  1. if exist "%%~a"  (
  2.    ren "%%~a" "%%~b"
  3.    echo %%~nxa 重命名为..... %%~nxb
  4. )
复制代码

作者: Macrae    时间: 2019-12-12 15:18

回复 2# terse


    万分感谢没有回显了,
大大还有个问题还请帮忙,就是我是拖拽整个文件夹到这个批处理上的,但是这个批处理只是读当前文件夹下的所有文件,并没有读子目录里面的文件,
该怎么改呢?还请赐教~
作者: terse    时间: 2019-12-12 16:15

回复 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. )
复制代码

作者: Macrae    时间: 2019-12-12 16:36

回复 4# terse


    提示系统找不到指定文件
作者: Macrae    时间: 2019-12-12 17:14

回复 4# terse


我有个目录A,A目录下有10个文件夹,每个文件夹里面有需要命名的文件
拖动A目录到批处理上,提示系统找不到文件
作者: terse    时间: 2019-12-12 17:31

本帖最后由 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. )
复制代码

作者: Macrae    时间: 2019-12-13 10:45

回复 7# terse


    提示语法错误?
作者: terse    时间: 2019-12-13 13:09

回复 8# Macrae

ren "%%d\%%~a" "%%d\%%~b" 前面加上 ECHO 看显示什么结果
作者: terse    时间: 2019-12-13 13:13

回复  terse
    提示语法错误?
Macrae 发表于 2019-12-13 10:45


因为按你上面代码改的 没测试 靠你反馈了
作者: Macrae    时间: 2019-12-13 14:33

回复 10# terse


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

似乎 ren 不支持带路径的值输入?
作者: Gin_Q    时间: 2019-12-13 16:17

回复 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>

作者: Gin_Q    时间: 2019-12-13 16:23

回复 11# Macrae


        path不要用来做变量名(和系统环境变量冲突)。
作者: terse    时间: 2019-12-13 16:59

回复 11# Macrae
去掉后面路径
  1. ren "%%d\%%~a" “%%~b"
复制代码

作者: Macrae    时间: 2019-12-13 18:35

本帖最后由 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
复制代码

作者: terse    时间: 2019-12-13 19:06

回复 15# Macrae
目测少了定义D 这样代码里%d%为空




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