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

[文件操作] [已解决]批处理如何对文件进行分类并将按指定格式构造出命令语句

[复制链接]
发表于 2016-8-25 11:38:29 | 显示全部楼层 |阅读模式
本帖最后由 sumirecccp 于 2016-8-26 04:07 编辑

实现输出指定命令的批处理求修改
主要诉求如下:
某个文件夹里有如下几个文件
VTS_01_PGC_02_CHAPTER_01_1.mp4
VTS_01_PGC_02_CHAPTER_02_1.mp4
……
VTS_01_PGC_03_CHAPTER_01_1.mp4
VTS_01_PGC_03_CHAPTER_02_1.mp4
……
VTS_01_PGC_02 - Chapter Information - OGG.txt
VTS_01_PGC_03 - Chapter Information - OGG.txt
……

想实现用批处理输出类似如下命令并执行:
"E:\D\software\megui\tools\mp4box\mp4box.exe" -add "VTS_01_PGC_02_CHAPTER_01_1.mp4" -cat "VTS_01_PGC_02_CHAPTER_02_1.mp4" -cat "VTS_01_PGC_02_CHAPTER_03_1.mp4" -cat "VTS_01_PGC_02_CHAPTER_04_1.mp4" -add  "chapter\VTS_01_PGC_02 - Chapter Information - OGG.txt" -new 02.mp4

"E:\D\software\megui\tools\mp4box\mp4box.exe" -add "VTS_01_PGC_03_CHAPTER_01_1.mp4" -cat "VTS_01_PGC_03_CHAPTER_02_1.mp4" -cat "VTS_01_PGC_03_CHAPTER_03_1.mp4" -cat "VTS_01_PGC_03_CHAPTER_04_1.mp4" "VTS_01_PGC_03_CHAPTER_05_1.mp4" -add  "chapter\VTS_01_PGC_03 - Chapter Information - OGG.txt" -new 03.mp4

难点在于:
PGC和CHAPTER后面的数字未必是从1开始,且中间可能有中断,也不知道具体结束的数字是多少(例:可能是2,3,5,7之类的,想要让电脑自动判断)

感谢xxpinqz的帮助,已解决,我修改了一下代码如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set com="E:\D\software\megui\tools\mp4box\mp4box.exe"
  4. for /f "delims=" %%a in ('dir /b VTS_01_PGC*.MP4') do (
  5.     set "var=%%a"
  6.     for %%b in ("@!var:~,13!@!var:~11,2!")do if not defined %%~b (set "%%~b=-add "%%a"") else set "%%~b=!%%~b! -cat "%%a""
  7. )
  8. for /f "tokens=1,2* delims=@=" %%a in ('set @') do (
  9.     %com% %%c -add "%%a - Chapter Information - OGG.txt" -new %%b.mp4
  10. )
  11. pause
复制代码

评分

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

查看全部评分

发表于 2016-8-25 14:14:46 | 显示全部楼层
本帖最后由 pcl_test 于 2016-8-25 14:16 编辑

分组实现:
VTS_01_PGC_02囊括
VTS_01_PGC_02_CHAPTER_01_1.mp4
VTS_01_PGC_02_CHAPTER_02_1.mp4
……
VTS_01_PGC_02 - Chapter Information - OGG.txt

VTS_01_PGC_03囊括
VTS_01_PGC_03_CHAPTER_01_1.mp4
VTS_01_PGC_03_CHAPTER_02_1.mp4
……
VTS_01_PGC_03 - Chapter Information - OGG.txt
发表于 2016-8-25 14:17:26 | 显示全部楼层
多学几种语言
 楼主| 发表于 2016-8-25 14:56:18 | 显示全部楼层
回复 2# pcl_test


    还是请附上完成的代码吧,方便看看
发表于 2016-8-25 17:27:52 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. set com="E:\D\software\megui\tools\mp4box\mp4box.exe"
  3. for /f "delims=" %%a in ('dir /b VTS_01_PGC*.MP4') do (
  4.     set "var=%%a"
  5.     for %%b in ("#!var:~,13!#!var:~11,2!")do if not defined %%~b (set "%%~b=-add "%%a"")else set "%%~b=!%%~b! -cat "%%a""
  6. )
  7. for /f "tokens=1,2* delims=#=" %%a in ('set #') do (
  8.     echo,%com% %%c -add  "chapter\%%a - Chapter Information - OGG.txt" -new %%b.mp4
  9. )
  10. pause
复制代码
只适合这样结构的文件名称。。。

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-8-25 17:33:11 | 显示全部楼层
本帖最后由 sumirecccp 于 2016-8-25 17:35 编辑

回复 5# xxpinqz


   谢谢, 运行后会生成
  1. "E:\D\software\megui\tools\mp4box\mp4box.exe"  -add  "chapter\envTSLOGsss5380 - Chapter Information - OGG.txt" -new 76310656.mp4
  2. "E:\D\software\megui\tools\mp4box\mp4box.exe" -add "VTS_01_PGC_01_CHAPTER_02_1.mp4" -cat "VTS_01_PGC_01_CHAPTER_03_1.mp4" -cat "VTS_01_PGC_01_CHAPTER_04_1.mp4" -add  "chapter\VTS_01_PGC_01 - Chapter Information - OGG.txt" -new 01.mp4
  3. "E:\D\software\megui\tools\mp4box\mp4box.exe" -add "VTS_01_PGC_02_CHAPTER_01_1.mp4" -cat "VTS_01_PGC_02_CHAPTER_03_1.mp4" -cat "VTS_01_PGC_02_CHAPTER_04_1.mp4" -cat "VTS_01_PGC_02_CHAPTER_05_1.mp4" -add  "chapter\VTS_01_PGC_02 - Chapter Information - OGG.txt" -new 02.mp4
复制代码
第一句特别奇怪,不知是从哪来的。
 楼主| 发表于 2016-8-26 03:57:01 | 显示全部楼层
本帖最后由 sumirecccp 于 2016-8-26 04:15 编辑

找到原因了,原来是Set #已经被python定义了,换成@就正常了
有两个问题想请教:1.set @代码里并没定义啊,请问要怎么in?总感觉会返回空集
2."tokens=1,2* delims=@="  里,为什么delims要等于@=两个字符?

@xxpinqz
发表于 2016-8-26 09:51:04 | 显示全部楼层
回复 7# sumirecccp


    你可以按你的想法把不必要的东西去掉试试看
发表于 2016-8-26 14:22:04 | 显示全部楼层
回复 7# sumirecccp


set 命令的帮助文档里面有介绍

SET command invoked with just a variable name, no equal sign or value
will display the value of all variables whose prefix matches the name
given to the SET command.  For example:

    SET P

would display all variables that begin with the letter 'P'
 楼主| 发表于 2016-8-26 14:46:50 | 显示全部楼层
回复 9# GNU


    也就是所有以@开头的变量的内容是吗?显示出来是类似这样的:
@VTS_01_PGC_01@01=-add "VTS_01_PGC_01_CHAPTER_02_1.mp4" -cat "VTS_01_PGC_01_CHAPTER_03_1.mp4" -cat "VTS_01_PGC_01_CHAPTER_04_1.mp4"

有点奇怪的是,@01=的后面这个=号是怎么来的?
发表于 2016-8-26 17:14:59 | 显示全部楼层
回复 10# sumirecccp


不光是变量的内容,应该是:
变量名=变量的内容
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 12:07 , Processed in 0.022290 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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