使用批量scipt将特定文件夹中的文本文件中包含的所有数据编译到一个文件中

时间:2014-04-26 18:28:14

标签: batch-file for-loop vbscript batch-processing

我无法让我的某个批处理程序正常工作。在程序中有一点我需要它只采取文件夹中文本文件的第一行并将它们编译成单个文本文件。

示例:c:\examplefolder包含5个名为atg.txt, brady.txt, cobra.txt, delta.txt的文本文件和exos.txt。每个文本文件只包含一行文本,例如"ATG......7"。我需要将这些文本文件的所有内容编译成单个文本文件。

背景信息:我尝试过在类似问题中给出的FOR行,但它给了我REPEATS。它往往会复制文本文件,我显然不想要。我也尝试过:TYPE c:\ examplefolder \ * .txt>> c:\ examplefolder \ output.txt,但这也提供了重复项。当文本文件的名称倾向于按时间顺序排列时,似乎会发生这种情况。因此,如果我在同一文件夹中有Atg.txt和Brady.txt并使用上述命令之一,则会复制文件的内容。它似乎两次传递文件。

我的程序示例:

REM ASKING FOR USER INPUT AND CREATING TEXT FILES...

Set /p brandname=Enter brand name:

Set /p count=Enter the current count for %brandname%:

Echo %brandname%.....%count% >> c:\examplefolder\%brandname%.txt


:viewingoutputfile

REM DELETING OUTPUT FILE AND CREATING A NEW ONE...

If exist c:\examplefolder\output.txt del /q c:\examplefolder\output.txt

FOR %%I in (c:\examplefolder\\*.txt) do echo %%I >> c:\examplefolder\output.txt

Type c:\output.txt

Pause

一旦文件夹随着时间的推移构建了它的内容,您可以想象有相当多的文件具有不同的名称。我们只说两个名为atg.txt和brady.txt的文本文件。我的输出文件包含:

Atg.....2

Brady.....4

Atg......2

Brady.....4

现在,显然我希望它阅读:

Atg.....2

Brady.....4

但事实并非如此。如果有人能找到解决这种困境的办法,我将非常感激。顺便说一句,我甚至尝试在文件名前加上%random%,这样文件的名称就是:3241atg.txt而不仅仅是atg.txt,但这会产生相同的重复问题。我完全难过了。

顺便说一下;如果有人可以为我提供一个批处理脚本,无需重复即可,但是,如果您知道可以完成工作的vbs脚本,我可以从批处理程序启动它。任何想法都会有所帮助。

4 个答案:

答案 0 :(得分:2)

试试这个

@echo off
setlocal EnableDelayedExpansion
for %%a in (*.txt) do (
set /p $line1=<"%%a"
echo !$line1!>>output.tmp
)
ren output.tmp output.txt

您将获得文件.txt

文件夹中output.txt个文件的第一行内容

答案 1 :(得分:1)

将输出文件放在单独的目录中。您所做的一切都是让cmd在制作输出文件时反复创建和删除临时文件。将所有内容从您正在处理的文件中移开。

或者构建一个列表,列出要处理的文件的快照,然后执行列表。使用dir / b。 (请记住批处理中的%% A和键入时的%A)。

for /f %A in ('dir /b *.txt') do echo type %A ^>^>output.txt>>output.bat
output.bat

答案 2 :(得分:0)

我会发布一个VBScript解决方案,因为我看到你已经标记了它。这是输入方面:

WScript.StdOut.Write "Enter brand name: "
brandname = WScript.StdIn.ReadLine()

WScript.StdOut.Write "Enter the current count for " & brandname & ": "
count = WScript.StdIn.ReadLine()

With CreateObject("Scripting.FileSystemObject").CreateTextFile("c:\examplefolder\" & brandname & ".txt", True)
    .WriteLine brandname & "....." & count
    .Close
End With

以下是将它们合并为一个文件的方法:

With CreateObject("Scripting.FileSystemObject")
    For Each File In .GetFolder("c:\examplefolder").Files
        s = s & .OpenTextFile(File.Path).ReadAll()
    Next
    .CreateTextFile("c:\examplefolder\output.txt", True).Write(s).Close
End With

答案 3 :(得分:0)

您获得重复的原因是因为输出文件具有相同的扩展名并且也在处理中。

这将有效:

TYPE "c:\examplefolder\*.txt" >> "c:\examplefolder\output.tmp"
ren "c:\examplefolder\output.tmp" "output.txt"