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

[文件操作] 【已解决】批处理通过文件名列表对文件操作,生成失败清单出错

[复制链接]
发表于 2024-3-6 15:14:55 | 显示全部楼层 |阅读模式
基本情况
我在本论坛上大侠给出的BAT基础上,摸索着写了下面的批处理。
第一步是根据各个文件名列表(TXT)新建子目录(用各文件名列表它的文件名);
第二步是根据各文件名列表里的各行,将MP4文件进行重命名及移入相应的子目录文件夹内。 如果上述失败,则生成失败清单文件(TXT)。

试验情况
1、为了谨慎起见,我先用2个文件名列表在其它文件夹内来试,能在达到目的,没有问题, 然后才动手进行操作。              
2、出现下列问题后,我再用4个文件名列表在其它文件夹内试,也能达到目的,没有问题。再多数量就没有再试了

出现的问题
1、对同一个文件名列表,会生成两个失败清单TXT(比如对应着文件名列表A,有“A合集移动失败”及“A合集移动失败合集移动失败”2个清单)。
2、上述三个TXT文件,内容都是一样的。
3、新建的子目录文件夹确是生成了。我大致浏览了其中几个,相应文件都实际成功移入了----但是还是有上述三个文件。
(MP4文件很多,有上千个;相应的文件名列表及生成的子目录也很多,有20多个吧;我没有一一查验)

求助:
现在是失败清单不OK,我估计是BAT的循环出问题了。
被动的是,我不知道有哪些是成功操作的,哪些是失败的。

所以附上代码,请各位高手不吝指导!
感谢!
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. set Ext=*.txt
  5. for %%i in (%Ext%) do (
  6. if not exist "%%~ni" md "%%~ni"
  7. for /f "useback delims=" %%a in ("%%i") do (
  8.         for /f "tokens=* delims=1234567890 " %%x in ("%%a") do (
  9.                 if exist "%%x.mp4" (
  10.                         ren "%%x.mp4" "%%a.mp4"
  11.                         move "%%a.mp4" "%%~ni"
  12.                 ) else (
  13.                         >>"%%~ni合集移动失败.txt" echo %%a
  14.                 )
  15.         )
  16. )
  17. )
  18. pause
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-3-6 15:25:46 | 显示全部楼层
回复 1# annwayili


合集移动失败.txt
改成:
合集移动失败.log

评分

参与人数 1技术 +1 收起 理由
annwayili + 1 十分感谢

查看全部评分

 楼主| 发表于 2024-3-6 15:34:07 | 显示全部楼层
回复 2# ShowCode

非常感谢!我等一下恢复原状试一试这个方法。

不过,纳闷的是,为什么我用4个或是2个文件列表测试时,没出问题呢?
发表于 2024-3-6 15:37:23 | 显示全部楼层
回复 1# annwayili


参考for命令教程第8页:
http://bbs.bathome.net/thread-31727-1-1.html

 楼主| 发表于 2024-3-6 15:46:31 | 显示全部楼层
回复 2# ShowCode

测试了,非常好!再次感谢!
 楼主| 发表于 2024-3-6 15:47:30 | 显示全部楼层
回复 4# Batcher

谢谢!

看来我是踩中这个坑了
发表于 2024-3-6 16:40:33 | 显示全部楼层
回复 3# annwayili


  for %%a in (*.txt) 边列举边处理,和排序有关系,可以改用for /f +dir 一次性列举完

  1. cd.>2.txt
  2. cd.>3.txt
  3. for %%a in (*.txt) do (
  4.         cd.>1.txt
  5.         echo %%a
  6. )
  7. 结果
  8. 2.txt
  9. 3.txt


  10. cd.>2.txt
  11. cd.>3.txt
  12. for %%a in (*.txt) do (
  13.         cd.>4.txt
  14.         echo %%a
  15. )
  16. 结果
  17. 2.txt
  18. 3.txt
  19. 4.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
annwayili + 1 多谢解惑

查看全部评分

 楼主| 发表于 2024-3-6 18:31:24 | 显示全部楼层
回复 7# 77七

多谢提供建议!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 04:49 , Processed in 0.013229 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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