Board logo

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

作者: sumirecccp    时间: 2016-8-25 11:38     标题: [已解决]批处理如何对文件进行分类并将按指定格式构造出命令语句

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

作者: pcl_test    时间: 2016-8-25 14:14

本帖最后由 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
作者: 523066680    时间: 2016-8-25 14:17

多学几种语言
作者: sumirecccp    时间: 2016-8-25 14:56

回复 2# pcl_test


    还是请附上完成的代码吧,方便看看
作者: xxpinqz    时间: 2016-8-25 17:27

  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
复制代码
只适合这样结构的文件名称。。。
作者: sumirecccp    时间: 2016-8-25 17:33

本帖最后由 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
复制代码
第一句特别奇怪,不知是从哪来的。
作者: sumirecccp    时间: 2016-8-26 03:57

本帖最后由 sumirecccp 于 2016-8-26 04:15 编辑

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

@xxpinqz
作者: CrLf    时间: 2016-8-26 09:51

回复 7# sumirecccp


    你可以按你的想法把不必要的东西去掉试试看
作者: GNU    时间: 2016-8-26 14:22

回复 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'
作者: sumirecccp    时间: 2016-8-26 14:46

回复 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=的后面这个=号是怎么来的?
作者: GNU    时间: 2016-8-26 17:14

回复 10# sumirecccp


不光是变量的内容,应该是:
变量名=变量的内容




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2