2013-09-07 5 views
1

J'ai une question sur le fichier batch suivant: il le fait est un travail tout à fait, mais je me demande si ce qui suit est possible:Demander analyseur batch aide mise à jour

Est-il possible pour elle de le laisser regarder dans plusieurs répertoires et de sortie le fichier dans ce répertoire spécifique et puis continue à la suivante jusqu'à ce qu'il atteigne la fin de la liste de répertoires, puis se termine.

Ainsi, par exemple:

main dir -subdir 
      -subdir1 
      -subdir2 
      -ect. 

je commence le lot en MAINDIR et il listera les fichiers chaque subdir dans un outputfile.rss dans ce subdir. donc ça va ressembler à ceci:

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. 

Et c'est le fichier batch que je voudrais "développer". Espérons que quelqu'un puisse m'aider avec ça?

@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 

Merci d'avance.

Répondre

0

Vous pouvez essayer quelque chose comme ceci:

@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 

Vous êtes un peu sur le bord de ce qui est utile à faire dans les scripts de traitement par lots. Il vaudrait mieux utiliser un vrai langage de script comme python, powershell ou javascript. Surtout si vous avez besoin d'étendre cela plus.

0

Voir si cela fait ce que vous avez besoin:

@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 
+0

Merci beaucoup verry, cette solution fait exactement ce que je voulais. Passez une bonne journée. – user2645886