Batch file 将txt文件中的行读入.csv

Batch file 将txt文件中的行读入.csv,batch-file,csv,ffmpeg,Batch File,Csv,Ffmpeg,我有一个使用ffmpeg通过批处理文件创建的.TXT文件。它返回以下信息(更多但试图简短) TXT文件会返回上面的3个文件。我只想使用上面的一些信息,然后我想创建一个.CSV文件,这样我就可以加载到.XLS文件中 我使用了以下内容,非常接近: REM now lets get info we need from result.txt pause REM checks how many times finds genre and loops that many times FOR /f "de

我有一个使用ffmpeg通过批处理文件创建的.TXT文件。它返回以下信息(更多但试图简短)

TXT文件会返回上面的3个文件。我只想使用上面的一些信息,然后我想创建一个.CSV文件,这样我就可以加载到.XLS文件中

我使用了以下内容,非常接近:

REM now lets get info we need from result.txt
pause 

REM checks how many times finds genre and loops that many times
FOR /f "delims=" %%b IN ('findstr "genre" result.txt') DO (
for %%f in (result.txt) do (
    set i=0

for /F "delims= tokens=2,3*" %%l in (%%f) do (
    set /A i+=1
    set line!i!=%%l

)
echo  !line9!, !line6!, !line8!,  >> result.csv
)
) 
pause 
这将带来以下内容:

 title=IRWX_TV_Vol_01_1_Pt_4 , genre=sport, episode_id=0101
 title=IRWX_TV_Vol_01_1_Pt_4 , genre=sport, episode_id=0101
 title=IRWX_TV_Vol_01_1_Pt_4 , genre=sport, episode_id=0101
仅显示.TXT文件中的第一个视频标题,而不是每个视频标题

我希望它能像这样回来:

 IRWX_TV_Vol_01_1_Pt_4,sport,0101
减去上面的变量“=”和空格

我已经一遍又一遍地尝试不同的事情,但它就是不起作用


希望这里有人能看到这个问题并提供帮助,谢谢,我相信在批处理文件中有一种方法可以做到这一点,但由于没有任何批处理文件神参与进来,我提供了一个VBSCript替代方案-我个人认为VBSCript可能更容易。总之,我根据你最初的问题做出了假设:

  • 看起来每个记录最多有9行(用于边界测试)
  • 您希望在一个文件中循环浏览多个记录:result.txt
  • 您希望将每条记录提取三行到csv类型的文件中,以便以后在excel中使用
  • 我已将脚本设置为在写入输出文件时剥离“流派=”“title=”和“插曲”\u id=。它还应在csv内返回结果,如下所示:

    体育,IRWX_TV_volu_01_1_Pt_40101

    将此代码另存为results.vbs或与result.txt文件位于同一目录中的其他文件(或更新inputFileName/outputfilename下列出的位置),并在命令提示符下运行,如下所示:

     IRWX_TV_Vol_01_1_Pt_4,sport,0101
    
    C:\Directoryname\path>cscript results.vbs

    流量:

  • 脚本试图打开“result.txt”

  • 然后它在整个文件中循环,按顺序搜索每个必需的变量(它将开始查找流派,然后查找标题,然后查找插曲id)

  • 当脚本生成结果时,一旦找到了插曲id,它会将找到的记录详细信息写入results.csv,并重新设置为搜索流派

  • 如果脚本超过了体裁,但在九行文本后没有找到标题行,它会假定记录无效,并将扫描重置回体裁(我希望这是有意义的)

  • 结果.vbs
    只需使用内置的
    数组

    @ECHO OFF &SETLOCAL enabledelayedexpansion
    for /f "tokens=1*delims==" %%a in (result.txt) do (
        if "%%a"=="major_brand" set /a varcnt+=1
        set "%%a!varcnt!=%%b"
    )
    for /l %%a in (1 1 %varcnt%) do echo(!title%%a!,!genre%%a!,!episode_id%%a!
    
    另一种方式:

    @echo off&cls
    setlocal EnableDelayedExpansion
    for /f "delims=" %%a in (result.txt) do (
       set $test=%%a
       set %%a
       if /i "!$test:~0,10!"=="episode_id" echo !title!, !genre!, !episode_id!)
    endlocal
    

    这些解决方案假设所有实例都存在这三个值

    假设您的文件中没有
    字符:

    @echo off
    setlocal enableDelayedExpansion
    
    >result.csv (
      for /f "tokens=1* delims==" %%A in (result.txt) do (
        set "%%A=%%B"
        if %%A equ episode_id echo !title!,!genre!,!episode_id!
      )
    )
    
    @echo off
    setlocal disableDelayedExpansion
    
    >result.csv (
      for /f "tokens=1* delims==" %%A in (result.txt) do (
        set "%%A=%%B"
        if %%A equ episode_id (
          setlocal enableDelayedExpansion
          echo !title!,!genre!,!episode_id!
          endlocal
        )
      )
    )
    
    如果您确实需要担心文件中的

    @echo off
    setlocal enableDelayedExpansion
    
    >result.csv (
      for /f "tokens=1* delims==" %%A in (result.txt) do (
        set "%%A=%%B"
        if %%A equ episode_id echo !title!,!genre!,!episode_id!
      )
    )
    
    @echo off
    setlocal disableDelayedExpansion
    
    >result.csv (
      for /f "tokens=1* delims==" %%A in (result.txt) do (
        set "%%A=%%B"
        if %%A equ episode_id (
          setlocal enableDelayedExpansion
          echo !title!,!genre!,!episode_id!
          endlocal
        )
      )
    )
    

    谢谢你的问题,我从来没有用vbscript做过任何事情,我会尝试一下,我真的希望有一个.bat文件,这样我也可以用它来制作和.exe文件,用这种语言可以吗?明天早上就可以了!我明白了。你可以试着用source forge的HtwoO将它转换成一个exe文件,即使它说的是python,我想dly也有vbscript。vbscript下载的链接是,如果您单独处理每个日志部分,而不是一次处理3组日志部分,这尤其容易。批处理文件是否允许您在两个文件之间处理日志,以便一次只处理一组信息?这很好,但我如何在第一时间消除空间每一个都结束了吗?