精品技术论坛

精品技术论坛 (https://bbs.et8.net/bbs/index.php)
-   『软件使用』 (https://bbs.et8.net/bbs/forumdisplay.php?f=17)
-   -   【求助】求一个批处理判断值的问题~~ (https://bbs.et8.net/bbs/showthread.php?t=1370894)

林展扬 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 2019-05-28 00:12:04

你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


林展扬 2019-05-28 10:15:33

引用:

作者: zeroxia (文章 17357737)
你3个for循环都用一个变量名A,太乱了。另外,setlocal EnableDelayedExpansion以后,变量的引用要用!variable_name!这样才有实际效果。经测试,文件名里不能有!,否则会有问题。批处理真是很拗口的脚本工具,尽量用Python吧。[CODE] echo offsetlocal En......

唔,无效。得到的总帧数还是不对。
Python不会,而且Python需要环境,这个可以拷着到处跑。

引用:

"宝宝版_宝宝玩游戏_15941.mp4" 15939
"宝宝版_进阶版_14睡觉真舒服_27928.mp4" 15939

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

littlefat 2019-05-28 15:03:28

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

siao 2019-05-28 22:35:40

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

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

WhoCares 2019-05-29 00:14:49

python可以打包成exe

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

引用:

作者: 林展扬 (文章 17357914)
唔,无效。得到的总帧数还是不对。
Python不会,而且Python需要环境,这个可以拷着到处跑。



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


林展扬 2019-05-29 20:15:45

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


所有时间均为北京时间, 现在的时间是 22:08:49.

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

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