我试图从ffmpeg输出中输出数字值并将其添加到文本文件中。
我想从批处理文件中将其作为单行运行,我已经设置了所有变量,但我不确定它是否可能。
这是输出字符串,我要复制average
值:
[Parsed_psnr_0 @ 0000000003763ec0] PSNR y:18.250891 u:33.358190 v:36.566447 average:19.962586 min:11.944585 max:41.255356
在这种情况下19.962586
,我有几个要处理的文件,数字总是不同。
这是一次无知的弱尝试:
powershell Get-Content -Path "'D:\work folder\test.txt'" | -match 'average:(.+?) min:' | Out-File -Path "D:\work folder\test_result.txt"
没有工作,我尝试的100种变化也没有,但是我把它作为我正在尝试的内容的粗略概念。
答案 0 :(得分:0)
测试字符串:
[Parsed_psnr_0 @ 0000000003763ec0] PSNR y:18.250891 u:33.358190 v:36.566447 average:19.962586 min:11.944585 max:41.255356
PowerShell解决方案(可以放入.cmd
文件):
powershell -Command "(Get-Content -Path 'D:\workfolder\test.txt') -match 'average:(.+?)' | Out-File -FilePath 'D:\workfolder\test_result.txt' -Append"
更新
SET "PS=%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe"
%PS% -Command "gc 'D:\workfolder\test.txt'|%{If($_-match 'average:(.+?)'){$Matches[0]}}|Out-File -FilePath 'D:\workfolder\test_result.txt' -Append"
答案 1 :(得分:0)
以下是使用批处理文件执行此操作的两种方法。还有其他解决方案。但其中任何一个都应该基于你的例子。
@echo off
REM Option 1
FOR /F "tokens=5 delims=:" %%G IN (test.txt) DO (
FOR /F "tokens=1" %%H IN ("%%~G") DO set "average1=%%~H"
)
echo average1: %average1%
REM option 2
setlocal enabledelayedexpansion
FOR /F "delims=" %%G IN (test.txt) DO (
set "line=%%~G"
FOR /F "tokens=1" %%H IN ("!line:*average:=!") DO set average2=%%H
)
endlocal&set "average2=%average2%"
echo average2: %average2%
pause
答案 2 :(得分:0)
以下是一个有效的PowerShell解决方案:
powershell -Command "(Get-Content -Path 'C:\file.txt').Split(' ') | foreach { if ($_ -match 'average'){ $_ -replace """[^^.0-9]""" , '' | Out-File -FilePath 'D:\file_output.txt' -Append}}"
归功于Adrian C.