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

[文件操作] 大神帮忙批处理重命名文件语句差错

  1. @echo on
  2. set alist=A.txt
  3. set blist=B.txt
  4. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  5.   if exist %%a:\*.* (
  6.     for %%b in (0 1 2 3 4 5 6 7 8 9) do (
  7.       if exist %%a:\song%%b\*.* (
  8.         for /f "tokens=1,2,3,4,5,6* delims=" %%c in (alist.txt) do (
  9.           if exist %%a:\song%%b\%%c.* (
  10.             for /f "tokens=1,2,3,4,5,6* delims=" %%d in (blist.txt) do (
  11.               if exist %%a:\song%%b\%%c.* ren %%a:\song%%b\%%c.* %%d.*
  12.             )
  13.           )
  14.         )
  15.       )
  16.     )
  17.   )
  18. )
  19. @echo on
  20. pause
复制代码
运行批处理后文件名不正常,有按照A.txt---B.txt去改但是有重名文件
求大神帮忙解决,万分感谢

A.txt内容
AS0000
AS0001
AS0002
AS0003
AS0004
AS0005
AS0006
AS0007
AS0008
AS0009
AS0010
AS0011
AS0012
AS0013
AS0014
AS0015
AS0016

B.txt内容
M00000
M00001
M00002
M00003
M00004
M00005
M00006
M00007
M00008
M00009
M00010
M00011
M00012
M00013
M00014
M00015
M00016

最后结果
M00000
M00000
M00000
M00000
M00000
M00001
M00001
M00002
M00003
M00004
M00005
M00006
M00007
M00008
M00009
M00010
M00011

TOP

  1. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  2.   if exist %%a:\*.* (
  3.     for %%b in (0 1 2 3 4 5 6 7 8 9) do (
  4.       if exist %%a:\song%%b\*.* (
  5.         for /f %%c in (alist.txt) do (
  6.           if exist %%a:\song%%b\%%c.* (
  7.                set /p d=
  8.                ren %%a:\song%%b\%%c.* !d!.*
  9.             )
  10.         )<blist.txt
  11.       )
  12.     )
  13.   )
  14. )
复制代码

TOP

回复 3# newswan


   感谢大哥帮忙,刚测试了一下文件有4-5个文件名变成!d!了,其余的文件名没有变化我只是想把A.txt里面的AS0000-AS0016变成M00000-M00016不是把AS0000-AS0016变成!d!

TOP

  1. setlocal ENABLEDELAYEDEXPANSION
  2. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  3.   if exist %%a:\*.* (
  4.     for %%b in (0 1 2 3 4 5 6 7 8 9) do (
  5.       if exist %%a:\song%%b\*.* (
  6.         call :f %%a:\song%%b
  7.       )
  8.     )
  9.   )
  10. )
  11. :f
  12. for /f %%c in (alist.txt) do (
  13.     if exist %1\%%c.* (
  14.         set /p d=
  15.         echo ren %%a:\song%%b\%%c.* !d!.*
  16.     )
  17. )<blist.txt
  18. goto :eof
  19. :END
复制代码
需要变量延迟,也许需要改成函数调用

TOP

本帖最后由 taoqixfz 于 2021-6-20 18:24 编辑

回复 5# newswan


   还是不对运行完批处理文件名没变化

TOP

回复 6# taoqixfz


    看命令输出 ,如果正确, 把 echo ren 前面 echo 删除

TOP

回复 7# newswan
现在已经让我整理成这样了,貌似差一个%%d的赋值
@echo on
@rem 指定原文件名列表文件
set alist=A.txt

@rem 指定新文件名列表文件
set blist=B.txt


for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  if exist %%a:\*.* (
    for %%b in (0 1 2 3 4 5 6 7 8 9) do (
      if exist %%a:\song%%b\*.* (
        for /f %%c in (%alist%) do (
          if exist %%a:\song%%b\%%c.* ren %%a:\song%%b\%%c.* %%d.*
        )
      )
    )
  )
)

@echo on


pause

TOP

本帖最后由 newswan 于 2021-6-20 19:24 编辑

回复 8# taoqixfz

%%d 来自 a.txt
用 set /p d= 和 <b.txt 得到 !d!

要么,你把 a.txt 和 b.txt 合并

TOP

回复 9# newswan


   合并倒是也可以但是我不会弄
AS0000.*M00000.*
AS0001.*M00001.*
AS0002.*M00002.*
AS0003.*M00003.*
AS0004.*M00004.*
AS0005.*M00005.*
AS0006.*M00006.*
AS0007.*M00007.*
AS0008.*M00008.*
AS0009.*M00009.*
AS0010.*M00010.*
AS0011.*M00011.*
AS0012.*M00012.*
AS0013.*M00013.*
AS0014.*M00014.*
AS0015.*M00015.*
AS0016.*M00016.*

TOP

  1. AS0000 M00000
  2. AS0001 M00001
  3. AS0002 M00002
  4. AS0003 M00003
  5. AS0004 M00004
  6. AS0005 M00005
  7. AS0006 M00006
  8. AS0007 M00007
  9. AS0008 M00008
  10. AS0009 M00009
  11. AS0010 M00010
  12. AS0011 M00011
  13. AS0012 M00012
  14. AS0013 M00013
  15. AS0014 M00014
  16. AS0015 M00015
  17. AS0016 M00016
复制代码

TOP

  1. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  2.   if exist %%a:\*.* (
  3.     for %%b in (0 1 2 3 4 5 6 7 8 9) do (
  4.       if exist %%a:\song%%b\*.* (
  5.         for /f "tokens=1,2 delims= " %%c in (c.txt) do (
  6.           if exist %%a:\song%%b\%%c.* ren %%a:\song%%b\%%c.* %%d.*
  7.         )
  8.       )
  9.     )
  10.   )
  11. )
复制代码

TOP

回复 1# taoqixfz
代码存在以下问题:
1.判断语句太多,效率低,有些是可以合并的。
2.代码第7、9行中"\*.*"不会起任何作用。
3.如果像2楼的情况正常不会出现重名文件,可能是ren语句中.*所致。
4.如果改名像2楼所示那么有规律,就不需要A.txt、B.txt来指定文件名。可直接修改文件名更简单。

TOP

本帖最后由 qixiaobin0715 于 2021-6-21 15:48 编辑

回复 2# taoqixfz
2楼情况,不用文本文件直接修改文件名:
  1. @echo off
  2. set var1=AS
  3. set var2=M0
  4. setlocal enabledelayedexpansion
  5. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.     for /l %%b in (0,1,9) do (
  7.         if exist %%a:\song%%b (
  8.             pushd "%%a:\song%%b"
  9.             for %%c in (%var1%*.*) do (
  10.                 set "str=%%c"
  11.                 set "str=!str:*%var1%=%var2%!"
  12.                 ren "%%c" "!str!"
  13.             )
  14.             popd
  15.         )
  16.     )
  17. )
  18. pause
复制代码
未测试。

TOP

本帖最后由 qixiaobin0715 于 2021-6-21 15:47 编辑

针对2楼情况简单点:
  1. @echo off
  2. for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  3.     for /l %%b in (0,1,9) do (
  4.         if exist %%a:\song%%b (
  5.             pushd "%%a:\song%%b"
  6.             ren AS* M0* 2>nul
  7.             popd
  8.         )
  9.     )
  10. )
  11. pause
复制代码

TOP

返回列表