标题: [文件操作] [已解决]批处理如何对文件进行分类并将按指定格式构造出命令语句 [打印本页]
作者: 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的帮助,已解决,我修改了一下代码如下:- @echo off
- setlocal enabledelayedexpansion
- set com="E:\D\software\megui\tools\mp4box\mp4box.exe"
- for /f "delims=" %%a in ('dir /b VTS_01_PGC*.MP4') do (
- set "var=%%a"
- for %%b in ("@!var:~,13!@!var:~11,2!")do if not defined %%~b (set "%%~b=-add "%%a"") else set "%%~b=!%%~b! -cat "%%a""
- )
- for /f "tokens=1,2* delims=@=" %%a in ('set @') do (
- %com% %%c -add "%%a - Chapter Information - OGG.txt" -new %%b.mp4
- )
- 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
- @echo off&setlocal enabledelayedexpansion
- set com="E:\D\software\megui\tools\mp4box\mp4box.exe"
- for /f "delims=" %%a in ('dir /b VTS_01_PGC*.MP4') do (
- set "var=%%a"
- for %%b in ("#!var:~,13!#!var:~11,2!")do if not defined %%~b (set "%%~b=-add "%%a"")else set "%%~b=!%%~b! -cat "%%a""
- )
- for /f "tokens=1,2* delims=#=" %%a in ('set #') do (
- echo,%com% %%c -add "chapter\%%a - Chapter Information - OGG.txt" -new %%b.mp4
- )
- pause
复制代码
只适合这样结构的文件名称。。。
作者: sumirecccp 时间: 2016-8-25 17:33
本帖最后由 sumirecccp 于 2016-8-25 17:35 编辑
回复 5# xxpinqz
谢谢, 运行后会生成- "E:\D\software\megui\tools\mp4box\mp4box.exe" -add "chapter\envTSLOGsss5380 - Chapter Information - OGG.txt" -new 76310656.mp4
- "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
- "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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |