0

我有一些包含一些 SVN 路径的文本文件。这些文本文件还将包含一些其他文本文件的引用,这些文本文件将包含 SVN 路径,并且可能包含对其他文本文件的引用。

让我们看下面的例子:

text1.txt

http://svnlink1
http://svnlink2
#file#>reference_txt1.txt
#file#>reference_txt2.txt

reference_txt1.txt

http://svnlink3
http://svnlink4
http://svnlink5
http://svnlink6

reference_txt2.txt

http://svnlink7
http://svnlink8
#file#>reference_txt3.txt

这里text1.txt是我的基本文件,其中包含 2 个 SVN 链接和 2 个其他文本文件的引用。

我想要的只是将SVN链接从任何文件中存在引用的所有文件写入到其他文件,比如output.txt

请询问问题是否明确或需要更多详细信息。

我试过的

@echo off

cd C:\Users\user\Desktop\
C:

:readLine
for /f "tokens=*" %%a in (text1.txt) do call :processline %%a

pause
goto :eof

:processline
set line=%*
IF line contains #file#> (
call:readLine %line%
)
ELSE (
echo %line% >> output.txt
)
goto :eof

:eof
4

2 回答 2

4

尝试这个。它实现了文件读取过程的递归调用process

@ECHO OFF &SETLOCAL
SET "startfolder=."
SET "ofile=output.txt"
CD /d "%startfolder%"
TYPE NUL>"%ofile%"
CALL :process "text1.txt"
ECHO done.
TYPE "%ofile%"
GOTO :eof

:process
SETLOCAL
FOR /f USEBACKQ %%a IN ("%~1") DO (
    FOR /f "tokens=1*delims=>" %%b IN ("%%a") DO (
        IF NOT "%%c"=="" (
            CALL :process "%%c"
        ) ELSE (
            >>"%ofile%" ECHO(%%a
        )
    )
)
ENDLOCAL
goto:eof

测试:

>类型 text1.txt 参考_txt?.txt

text1.txt


http://svnlink1
http://svnlink2
#file#>reference_txt1.txt
#file#>reference_txt2.txt

reference_txt1.txt


http://svnlink3
http://svnlink4
http://svnlink5
http://svnlink6

reference_txt2.txt


http://svnlink7
http://svnlink8
#file#>reference_txt3.txt

reference_txt3.txt


http://svnlink9
http://svnlink10
http://svnlink11
http://svnlink12

>脚本.bat
完毕。
http://svnlink1
http://svnlink2
http://svnlink3
http://svnlink4
http://svnlink5
http://svnlink6
http://svnlink7
http://svnlink8
http://svnlink9
http://svnlink10
http://svnlink11
http://svnlink12
于 2013-07-23T13:47:12.173 回答
0

您必须引用字符串并转义特殊字符,因为>这是重定向标准输出的特殊字符。

@echo off

cd C:\Users\user\Desktop\
C:
call :readline text1.txt
goto :eof

:readLine
for /f "tokens=1,2 delims=^>" %%a in (%1) do call :processline %%a %%b
pause
goto :eof

:processline
if %2.==. (
    echo %line% >> output.txt
) else (
    if %1=="#file#" call :readLine %2
)
goto :eof
于 2013-07-23T12:51:23.520 回答