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

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

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 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

TOP

多学几种语言

TOP

回复 2# pcl_test


    还是请附上完成的代码吧,方便看看

TOP

  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

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 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
复制代码
第一句特别奇怪,不知是从哪来的。

TOP

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

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

@xxpinqz

TOP

回复 7# sumirecccp


    你可以按你的想法把不必要的东西去掉试试看

TOP

回复 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'

TOP

回复 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=的后面这个=号是怎么来的?

TOP

回复 10# sumirecccp


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

TOP

返回列表