. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 回复
 
主题工具
林展扬
 
林展扬 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,968 声望值: 3
精华: 0
#1 旧 2019-05-27, 21:17:57 默认 【求助】求一个批处理判断值的问题~~
林展扬 当前离线  

代码:
setlocal EnableDelayedExpansion
set Format=*.avi *.mkv *.mp4 *.mpg *.vob *.wmv
set ffmpeg=%CD%\Binaries\ffmpeg_4.1.3.exe
set neroaac=%CD%\Binaries\NeroAACEnc.exe
set x265=%CD%\Binaries\x265_Yuuki_3.0.2.23_10Bit.exe
set mediainfo=%CD%\Binaries\MediaInfo_18.05.exe

for /f "delims=" %%a in ('dir %Format% /b') do (
  for /f %%A in ('%mediainfo% --Output^=Video^;%%AspectRatio%% "%%a"') do (
  if %%A GEQ 1.5 (set WIDTH=832) else set WIDTH=624
  for /f %%A in ('%mediainfo% --Output^=Video^;%%FrameCount%% "%%a"') do (
  set FRAMECOUNT=%%A
echo "%%a" !FRAMECOUNT! >>D:\Encoder\Test.txt
  )
  )
)
这是脚本代码,首先用MediaInfo判断DAR,然后判断总帧数。

现在问题是,第二个文件不会重新判断。
引用:
"宝宝版_宝宝玩游戏_15941.mp4" 15939
"宝宝版_进阶版_14睡觉真舒服_27928.mp4" 15939
请教一下,这个应该怎样改?


坚持失去了意义,是消失的时候了。
回复时引用此帖
zeroxia
 
zeroxia 的头像
核心会员
 
资 料:
注册日期: Jun 2009
帖子: 2,813 声望值: 3
精华: 0,解答: 37
#2 旧 2019-05-28, 00:12:04 默认
zeroxia 当前离线  

你3个for循环都用一个变量名A,太乱了。
另外,setlocal EnableDelayedExpansion以后,变量的引用要用!variable_name!这样才有实际效果。
经测试,文件名里不能有!,否则会有问题。批处理真是很拗口的脚本工具,尽量用Python吧。
代码:
@echo off
setlocal EnableDelayedExpansion

set Format=*.avi *.mkv *.mp4 *.mpg *.vob *.wmv
set ffmpeg=%CD%\Binaries\ffmpeg_4.1.3.exe
set neroaac=%CD%\Binaries\NeroAACEnc.exe
set x265=%CD%\Binaries\x265_Yuuki_3.0.2.23_10Bit.exe
set mediainfo=%CD%\Binaries\MediaInfo_18.05.exe

for /f "delims=*" %%f in ('dir /b %Format%') do (
	for /f %%a in ('%mediainfo% --Output^=Video^;%%AspectRatio%% "%%f"') do (
		if %%a GEQ 1.5 (set WIDTH=832) else set WIDTH=624
		for /f %%c in ('%mediainfo% --Output^=Video^;%%FrameCount%% "%%f"') do (
			set FRAMECOUNT=%%c
			echo "%%f" !FRAMECOUNT! >>%CD%\Test.txt
            echo File: [%%~f] A/R %%~a Frames %%~c
		)
	)
)

endlocal


The world is beautiful for Cece.
回复时引用此帖
林展扬
 
林展扬 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,968 声望值: 3
精华: 0
#3 旧 2019-05-28, 10:15:33 默认
林展扬 当前离线  

引用:
作者: zeroxia 查看帖子
你3个for循环都用一个变量名A,太乱了。另外,setlocal EnableDelayedExpansion以后,变量的引用要用!variable_name!这样才有实际效果。经测试,文件名里不能有!,否则会有问题。批处理真是很拗口的脚本工具,尽量用Python吧。[CODE] echo offsetlocal En......
唔,无效。得到的总帧数还是不对。
Python不会,而且Python需要环境,这个可以拷着到处跑。

引用:
"宝宝版_宝宝玩游戏_15941.mp4" 15939
"宝宝版_进阶版_14睡觉真舒服_27928.mp4" 15939
第二个的帧数应该是27928才对。
回复时引用此帖
littlefat
 
littlefat 的头像
热心会员
 
资 料:
注册日期: Jul 2001
帖子: 3,507 声望值: 5
精华: 2,解答: 7
#4 旧 2019-05-28, 15:03:28 默认
littlefat 当前离线  

PowerShell就方便多了,也不难学。。。


Little@FAT :)
回复时引用此帖
siao
 
siao 的头像
中级会员
 
资 料:
注册日期: Oct 2001
帖子: 502 声望值: 1
精华: 0
#5 旧 2019-05-28, 22:35:40 默认
siao 当前离线  

可能是for循环里面的变量的问题,建议你将循环里面的变量去掉,直接调用子过程
@echo off
SET count=1
FOR /f "tokens=*" %%G IN ('dir /b') DO (call ubroutine "%%G")
GOTO :eof

ubroutine
echo %count%:%1
set /a count+=1
GOTO :eof


######
#####
###
##
#
回复时引用此帖
WhoCares
 
WhoCares 的头像
传说中的……
 
资 料:
注册日期: Dec 2000
帖子: 6,865 声望值: 3
精华: 0,解答: 50
#6 旧 2019-05-29, 00:14:49 默认
WhoCares 当前离线  

python可以打包成exe

复杂的DOS批处理脚本,实际上看都不想看,头大

引用:
作者: 林展扬 查看帖子
唔,无效。得到的总帧数还是不对。
Python不会,而且Python需要环境,这个可以拷着到处跑。



第二个的帧数应该是27928才对。


Life finds a way. Jurassic Park (1993)
回复时引用此帖
林展扬
 
林展扬 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,968 声望值: 3
精华: 0
#7 旧 2019-05-29, 20:15:45 默认
林展扬 当前离线  

在@namejm大佬的指点下,解决问题了。
问题的原因是我随手用的变量%FRAMECOUNT%正好和上面的MediaInfo固定输入格式的%FrameCount%有冲突,完成二次赋值失败。
感谢namejm大佬很晚了还帮我找问题,也感谢几位热心的朋友。
回复时引用此帖
发表新主题 回复

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 19:39:48.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号