首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WIndows findstr

WIndows findstr
EN

Stack Overflow用户
提问于 2015-07-06 07:17:38
回答 2查看 432关注 0票数 0

我想使用以下命令搜索文本文件中的字符串

代码语言:javascript
复制
findstr silence_start:* test.txt

这是输出

代码语言:javascript
复制
C:\Users\brett\Desktop\masterpuppets>findstr  ilence_start:* test.txt
[silencedetect @ 00000000042eb5c0] silence_start: -0.00260771
[silencedetect @ 00000000042eb5c0] silence_start: 310.019
[silencedetect @ 00000000042eb5c0] silence_start: 822.097
[silencedetect @ 00000000042eb5c0] silence_start: 1211.84
[silencedetect @ 00000000042eb5c0] silence_start: 1605.72
[silencedetect @ 00000000042eb5c0] silence_start: 2443.7
[silencedetect @ 00000000042eb5c0] silence_start: 2946.45
[silencedetect @ 00000000042eb5c0] silence_start: 2955.28
[silencedetect @ 00000000042eb5c0] silence_start: 3279.93

我需要的是silence_start:之后的数字,我想将它们存储在一个数组中。我从来没有在windows中尝试过这一点,并且无法从批处理文件的命令行执行吗?任何帮助都会很好。我试图在沉默的时候把mp3切成碎片..。

更新的输出和测试文件的内容。首先,测试文件im从

代码语言:javascript
复制
ffmpeg version N-63968-g73d820e Copyright (c) 2000-2014 the FFmpeg developers
  built on Jun 15 2014 00:52:21 with gcc 4.8.3 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink --enable-zlib
  libavutil      52. 89.100 / 52. 89.100
  libavcodec     55. 66.101 / 55. 66.101
  libavformat    55. 43.100 / 55. 43.100
  libavdevice    55. 13.101 / 55. 13.101
  libavfilter     4.  8.100 /  4.  8.100
  libswscale      2.  6.100 /  2.  6.100
  libswresample   0. 19.100 /  0. 19.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mp3, from 'mp.mp3':
  Metadata:
    major_brand     : dash
    minor_version   : 0
    compatible_brands: iso6mp41
    encoder         : Lavf55.43.100
  Duration: 00:55:00.08, start: 0.025057, bitrate: 320 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
Output #0, null, to 'pipe:':
  Metadata:
    major_brand     : dash
    minor_version   : 0
    compatible_brands: iso6mp41
    encoder         : Lavf55.43.100
    Stream #0:0: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s
    Metadata:
      encoder         : Lavc55.66.101 pcm_s16le
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 (native) -> pcm_s16le (pcm_s16le))
Press [q] to stop, [?] for help
[silencedetect @ 00000000042eb5c0] silence_start: -0.00260771
[silencedetect @ 00000000042eb5c0] silence_end: 0.601882 | silence_duration: 0.60449
size=N/A time=00:03:00.19 bitrate=N/A    
[silencedetect @ 00000000042eb5c0] silence_start: 310.019
[silencedetect @ 00000000042eb5c0] silence_end: 311.772 | silence_duration: 1.75388
size=N/A time=00:05:46.04 bitrate=N/A    
size=N/A time=00:08:28.29 bitrate=N/A    
size=N/A time=00:11:17.04 bitrate=N/A    
[silencedetect @ 00000000042eb5c0] silence_start: 822.097
[silencedetect @ 00000000042eb5c0] silence_end: 827.064 | silence_duration: 4.96694
size=N/A time=00:14:09.05 bitrate=N/A    
size=N/A time=00:16:46.36 bitrate=N/A    
size=N/A time=00:19:36.63 bitrate=N/A    
[silencedetect @ 00000000042eb5c0] silence_start: 1211.84
[silencedetect @ 00000000042eb5c0] silence_end: 1214.96 | silence_duration: 3.11224
size=N/A time=00:22:34.29 bitrate=N/A    
size=N/A time=00:25:28.00 bitrate=N/A    
[silencedetect @ 00000000042eb5c0] silence_start: 1605.72
[silencedetect @ 00000000042eb5c0] silence_end: 1610.21 | silence_duration: 4.49673
size=N/A time=00:28:29.95 bitrate=N/A    
size=N/A time=00:31:33.69 bitrate=N/A    
size=N/A time=00:34:28.03 bitrate=N/A    
size=N/A time=00:37:29.50 bitrate=N/A    
size=N/A time=00:40:09.74 bitrate=N/A    
[silencedetect @ 00000000042eb5c0] silence_start: 2443.7
[silencedetect @ 00000000042eb5c0] silence_end: 2445.32 | silence_duration: 1.62327
size=N/A time=00:43:07.09 bitrate=N/A    
size=N/A time=00:45:56.28 bitrate=N/A    
size=N/A time=00:48:43.67 bitrate=N/A    
[silencedetect @ 00000000042eb5c0] silence_start: 2946.45
[silencedetect @ 00000000042eb5c0] silence_end: 2953.51 | silence_duration: 7.05673
[silencedetect @ 00000000042eb5c0] silence_start: 2955.28
[silencedetect @ 00000000042eb5c0] silence_end: 2955.83 | silence_duration: 0.552245
size=N/A time=00:51:42.79 bitrate=N/A    
[silencedetect @ 00000000042eb5c0] silence_start: 3279.93
size=N/A time=00:54:45.44 bitrate=N/A    
size=N/A time=00:55:00.05 bitrate=N/A    

video:0kB audio:568485kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

接下来是我的批处理文件和Michaels示例。

代码语言:javascript
复制
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=0
FOR /F "tokens=*" %%a IN ('findstr silence_start:* test.txt') DO (
    FOR /F "tokens=2 delims=:" %%b IN ("%%a") DO (
        SET number=%%b
        SET number=!number:~1!
        ECHO !number!
    )

)

从命令行运行测试命令

代码语言:javascript
复制
C:\Users\brett\Desktop\masterpuppets>findstr silence_start: test.txt
[silencedetect @ 00000000042eb5c0] silence_start: -0.00260771
[silencedetect @ 00000000042eb5c0] silence_start: 310.019
[silencedetect @ 00000000042eb5c0] silence_start: 822.097
[silencedetect @ 00000000042eb5c0] silence_start: 1211.84
[silencedetect @ 00000000042eb5c0] silence_start: 1605.72
[silencedetect @ 00000000042eb5c0] silence_start: 2443.7
[silencedetect @ 00000000042eb5c0] silence_start: 2946.45
[silencedetect @ 00000000042eb5c0] silence_start: 2955.28
[silencedetect @ 00000000042eb5c0] silence_start: 3279.93

来自mybat.bat的输出

代码语言:javascript
复制
C:\Users\brett\Desktop\masterpuppets>mybat.bat
-0.00260771
3
5
4
2
8
3
2955.28
1
EN

回答 2

Stack Overflow用户

发布于 2015-07-06 07:40:24

要提取:背后的数字,这将起作用:

代码语言:javascript
复制
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=0
FOR /F "tokens=*" %%a IN ('findstr silence_start:* testinput.txt') DO (
    FOR /F "delims=: tokens=2" %%b IN ("%%a") DO (
        SET number=%%b
        SET number=!number:~1!
        ECHO !number!
    )
)

但是,CMD /批处理中没有数组。有一个解决办法可以实现一些描述这里的数据结构,但它仍然很难看。相反,我会将提取的值存储在一个临时文本文件中。

票数 1
EN

Stack Overflow用户

发布于 2015-07-06 11:54:32

您的FINDSTR搜索不是您所认为的那样-它是一个正则表达式,因此它查找"silent_start“后面的0或更多":”

我修改了您的搜索,以更准确,使用字符串文字搜索代替。

下面是一个纯粹的批处理解决方案。我将FINDSTR结果传输到第二个FINDSTR,在每行前面加上“行号”,作为“数组”计数器。

第二个FOR /F循环用于剥离前导空间。

代码语言:javascript
复制
@echo off
setlocal enableDelayedExpansion
:: Load the "array"
for /f "tokens=1,3 delims=:" %%A in (
  'findstr /c:"] silence_start: " test.txt ^| findstr /n "^"'
) do for /f "tokens=*" %%B in ("%%B") do (
  set "num.%%A=%%B
  set "num.cnt=%%A
)

:: List the "array" members
for /l %%N in (1 1 %num.cnt%) do echo num.%%N=!num.%%N!

使用我的JREPL.BAT正则表达式文本处理实用程序,代码更简单,效率更高。JREPL.BAT是纯脚本,从XP开始在任何Windows机器上本地运行。

/JBEG选项将计数器n初始化为0。/JMATCH将替换字符串视为JScript表达式。搜索将查找并捕获一个小数位数,并在"] silence_start:“后面加上可选的前导减号。替换表达式增加计数器,并用空格分隔符将该值与已找到的十进制数连接起来。

所以现在一个用于/F的单变量可以很容易地解析出计数器和十进制数。

代码语言:javascript
复制
@echo off
setlocal enableDelayedExpansion

:: Load the "array"
for /f "tokens=1,2" %%A in (
  'jrepl "] silence_start: (-?\d+\.\d+)" "++n + ' '+ $1" /jmatch /jbeg "n=0" /f "test.txt"'
) do (
  set "num.%%A=%%B"
  set "num.cnt=%%A"
)

:: List the "array" members
for /l %%N in (1 1 %num.cnt%) do echo num.%%N=!num.%%N!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31239810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档