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

[文件操作] 批处理怎样根据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表里面的文件会提示没有找到文件,怎么关闭这个回显?没有文件就不执行重命名

感谢大佬帮忙解答!大佬年会中大奖!

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

TOP

回复 2# terse


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

TOP

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

TOP

回复 4# terse


    提示系统找不到指定文件

TOP

回复 4# terse


我有个目录A,A目录下有10个文件夹,每个文件夹里面有需要命名的文件
拖动A目录到批处理上,提示系统找不到文件

TOP

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

TOP

回复 7# terse


    提示语法错误?

TOP

回复 8# Macrae

ren "%%d\%%~a" "%%d\%%~b" 前面加上 ECHO 看显示什么结果

TOP

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


因为按你上面代码改的 没测试 靠你反馈了

TOP

回复 10# terse


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

似乎 ren 不支持带路径的值输入?

TOP

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

TOP

回复 11# Macrae


        path不要用来做变量名(和系统环境变量冲突)。

TOP

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

TOP

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

TOP

返回列表