请求帮助更新批处理解析器

时间:2013-09-07 18:46:14

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

我对以下批处理文件有疑问: 它完美的工作,但我想知道以下是否可能:

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

例如:

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  

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

@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这样的真实脚本语言会好得多。特别是如果你需要更多地扩展它。

答案 1 :(得分:0)

看看这是否符合您的要求:

@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