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

[其他] 【已解决】文件合成的批处理代码,求大神优化下

本帖最后由 332971606 于 2015-8-5 13:40 编辑
  1. @echo off
  2. set num=1
  3. :A
  4. if exist "??????????????%num%[1].ts" (copy /b 1.ts + ??????????????%num%[1].ts) else (pause&exit)
  5. set /a num+=1
  6. goto :A
复制代码
代码中的??????????????%num%[1].ts 是文件名,前面有11个字符位置, 按num变量一直加,然后做If判断,
copy /b 可以把1.ts和找到的文件合并起来放到 1.ts里,
  
这个代码运行很慢,求大哥大神帮忙优化下,
  
本来这个合成用 copy /b *.ts  1.ts   合成非常快,但是默认排序是首字母排序,
10到19 或100到199 会跳到 2 的上面.

求大神帮忙解决下,先跪谢了,

附文件样本网盘:http://pan.baidu.com/s/1jG1qGg2




可能之前我表达的不清楚,让很多大神迷糊了,对不住大神们了,先对所有查看过本贴的表示非常非常巨大的感谢,


谢谢大家了.

給 NTFS 磁碟機使用
  1. md  0  00  000
  2. move *-?[1].ts    0
  3. move *-??[1].ts   00
  4. move *-???[1].ts  000
  5. for %%a in ("%cd%") do  copy /b  0\*  +  00\*  +  000\*  "%%~nxa.ts"
复制代码

TOP

回复 8# tigerpower


    666666 ,如梦初醒哇,太精辟的几句了,我的问题解决了, 如果里面的1.ts 能改名,或者改名为当前文件夹的名字.ts, 就真神了
请不要问我为什么图像是妹子

TOP

回复 6# CrLf


    运行了下,发现没有退出结果,1.ts会无限加,

    那个文件名的特点是
    前面肯定有11个字符,然后是一个递加的数,后面的是固定的[1].ts,
   5#的改名不知道怎么写,我又发了个求改名的,想把中间那个递加数的前面补0补到3位数
请不要问我为什么图像是妹子

TOP

回复 4# 332971606


5 楼想法不错,不想该文件名的话也可以试试这样
  1. @echo off & setlocal enabledelayedexpansion
  2. set "p=????????????"
  3. (for /l %%a in (1 1 10) do (
  4.    if exist !p!.ts (
  5.       findstr .* !p!.ts
  6.       set "p=!p!?"
  7.    ) else (
  8.       pause>con
  9.       exit /b
  10.    )
  11. ))>1.ts
复制代码

TOP

本帖最后由 回家路上 于 2015-8-5 08:27 编辑

回复 4# 332971606


菜鸟表示一下自己的想法。
  1. 先把所有文件重命名,规则如下:
  2. 文件名中所有的
  3. 0———》a
  4. 1———>b
  5. 2———>c
  6. 3———>d
  7. 4———>f
  8. 5———>g
  9. 6———>h
  10. 7———>i
  11. 8———>j
  12. 9———>k
  13. 如果是每增加一位,在重命名的时候最前面多个“z”
  14. 如:
  15. 10———》zba
  16. 19———》zbk
  17. 28———>zcj
  18. 136———>zzdh
  19. 然后,再用你说那比较快的【copy /b *.ts  1.ts】排序是有了
  20. 不知道会不会快
复制代码

TOP

回复 3# CrLf


    遍历条件里的最大数不稳定,文件个数可能到3位数,提问里的代码会变满的原因是,1.ts变大以后就会变满,

TOP

另一种思路
  1. @echo off & setlocal enabledelayedexpansion
  2. set "p=????????????">1.ts
  3. for /l %%a in (1 1 10) do (
  4.    if exist !p!.ts (
  5.       copy /b 1.ts+!p!.ts
  6.       set "p=!p!?"
  7.    ) else (
  8.       pause
  9.       exit /b
  10.    )
  11. )
复制代码

TOP

求大神帮忙整整

TOP

返回列表