使用Windows批处理文件

时间:2017-01-19 20:41:04

标签: windows batch-file cmd

我有一个批处理文件,在几个.RTF文件(file1)中查找特定信息,然后将文档名称放在file2中。我需要在命令行电子邮件程序中创建一个逗号分隔文件(file3),以根据file2的内容将所有file1作为附件发送。

我的批处理文件正确创建了所有file1和file2。我有一个FOR语句,它在file2中的文档名称末尾添加一个逗号,并在发出ECHO命令时用逗号显示文档名称。

批处理文件只会输出它遇到的最后一个文件名/逗号。

如何使用每行末尾的逗号将file2中的所有文档名称写入file3。

当前输出到file3:

7868685425587963.rtf,

所需的输出到file3:

7868684496427836.RTF,
786868535408221.RTF,
7868685416423800.RTF,
7868685425587963.rtf,

批处理文件中的脚本:

setlocal

del file2.txt
del file3.txt

set comma=,
echo %comma%

rename *.DAT *.RTF,

findstr /m "0097" *.RTF >> file2.txt 

for /f  %%a In (file2.txt) DO set str=%%a%comma%  
echo %str%>> file3.txt

pause

endlocal

命令行输出:
command line output

我一直试图解决这个问题几个星期,并尝试了很多次。

2 个答案:

答案 0 :(得分:0)

而不是一遍又一遍地设置str,

for /f  %%a In (file2.txt) DO set str=%%a%comma%  
echo %str%>> file3.txt

直接附加到文件。

for /f  %%a In (file2.txt) DO echo %%a%comma%>> file3.txt

答案 1 :(得分:0)

代码中的问题是命令echo %str%for /F循环之外,因此它在循环之后执行并仅输出最后一行。 answer已在{{3}}中显示如何解决此问题。

但是,您不需要为任务创建临时文件file2.txtfor /F循环可用于捕获findstr命令行的输出:

> "file3.txt" (
    for /F "delims=" %%F in ('
        findstr /M /F:"file1.txt" "0097"
    ') do (
        echo(%%F,
    )
)

如果要搜索当前目录中的所有.rtf文件而不是依赖列出file1.txt文件的文件.rtf,请改为使用此文件:

> "file3.txt" (
    for /F "delims=" %%F in ('
        findstr /M "0097" "*.rtf"
    ') do (
        echo(%%F,
    )
)