【问题标题】:Asking help updating batch parser请求帮助更新批处理解析器
【发布时间】:2013-09-07 18:46:14
【问题描述】:

我对以下批处理文件有疑问: 它确实工作得很好,但我想知道以下是否可能:

有没有办法让它在几个目录中查找并输出该特定目录中的文件,然后继续下一个,直到它到达目录列表的末尾然后完成。

例如:

main dir  -subdir
          -subdir1
          -subdir2
          -ect.

我在 maindir 中启动批处理,它会在该子目录中的 outputfile.rss 中列出每个子目录中的文件。所以它看起来像这样:

main dir  -subdir - outfile.rss (contains the list of files of this subdir)
          -subdir1- outfile.rss (contains the list of files of this subdir)
          -subdir2- outfile.rss (contains the list of files of this subdir) 
          -ect.

这是我想“扩展”的批处理文件。 希望有人可以帮助我吗?

@ECHO OFF &SETLOCAL
SET "header1=<rss version="2.0" xmlns:jwplayer="http://rss.jwpcdn.com/">"
SET "header2=    <channel>"
SET "footer1=    </channel>"
SET "footer2=</rss>"

(
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO(!header1!
ECHO(!header2!
ECHO(
ENDLOCAL
FOR %%a IN (*.flv *.mp4) DO (
    ECHO(    ^<item^>
    ECHO(        ^<title^> %%~na ^</title^>
    ECHO(        ^<jwplayer:source file="/temp/records/%%~nxa" /^>
    ECHO(    ^</item^>
)
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO(
ECHO(!footer1!
ECHO(!footer2!
)>outfile.rss  

提前致谢。

【问题讨论】:

    标签: loops search batch-file dos text-parsing


    【解决方案1】:

    你可以试试这样的:

    @ECHO OFF 
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    
    REM calculate the length of local path 
    FOR /L %%n in (1 1 500) do if "!__cd__:~%%n,1!" neq "" set /a "len=%%n+1"
    
    SET "header1=<rss version="2.0" xmlns:jwplayer="http://rss.jwpcdn.com/">"
    SET "header2=    <channel>"
    SET "footer1=    </channel>"
    SET "footer2=</rss>"
    
    
    (
        ECHO.!header1!
        ECHO.!header2!
        ECHO.
    
        FOR /R %%a IN (*.flv *.mp4) DO (
            SET "absPath=%%a"
            SET "relPath=!absPath:~%len%!"
            SET "webPath=!relPath:\=/!"
            ECHO.    ^<item^>
            ECHO.        ^<title^> %%~na ^</title^>
            ECHO.        ^<jwplayer:source file="/temp/records/!webPath!" /^>
            ECHO.    ^</item^>
        )
        ECHO. 
        ECHO.!footer1!
        ECHO.!footer2!
    ) & REM put "> file.rss" here if you want a file 
    
    ENDLOCAL
    

    您对批处理脚本中有用的东西有点了解。使用真正的脚本语言(如 python、powershell 或 javascript)会更好。特别是如果您需要进一步扩展它。

    【讨论】:

      【解决方案2】:

      看看这是否满足你的需要:

      @echo off
       for /d /r %%a in (*) do (
          pushd "%%a"
             for %%b in ("%cd%") do call :rss "%%~nxa"
          popd
       )
      goto :eof
      :rss
      @ECHO OFF &SETLOCAL
      SET "header1=<rss version="2.0" xmlns:jwplayer="http://rss.jwpcdn.com/">"
      SET "header2=    <channel>"
      SET "footer1=    </channel>"
      SET "footer2=</rss>"
      
      (
      SETLOCAL ENABLEDELAYEDEXPANSION
      ECHO(!header1!
      ECHO(!header2!
      ECHO(
      ENDLOCAL
      FOR %%a IN (*.flv *.mp4) DO (
          ECHO(    ^<item^>
          ECHO(        ^<title^> %%~na ^</title^>
          ECHO(        ^<jwplayer:source file="/temp/records/%~1/%%~nxa" /^>
          ECHO(    ^</item^>
      )
      SETLOCAL ENABLEDELAYEDEXPANSION
      ECHO(
      ECHO(!footer1!
      ECHO(!footer2!
      )>outfile.rss  
      

      【讨论】:

      • 非常感谢,这个解决方案正是我想要的。祝你有个愉快的一天。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多