【问题标题】:Merging Two Text Files into One CSV File将两个文本文件合并为一个 CSV 文件
【发布时间】:2011-01-12 18:39:49
【问题描述】:

我正在使用 Windows 批处理命令来创建文件路径和文件名列表(不包括 ext)以进行处理和归档。我需要制作一个包含文件路径和文件名的 CSV 文件。

我能够使用“DIR /A-D-S /D /S”命令输出带有文件路径的列表,即 filelistA.txt。然后我使用 vbscript (makelistB.vbs) 去除路径和扩展名并将其保存为 filelistB.txt。我需要将两个文件逐行合并,将逗号分隔符放在中间,这就是我需要某种 VBscript 的地方。

filelistA.txt 看起来像:
C:\Data\Clients\COLD\AC3060P.txt
C:\Data\Clients\COLD\AC3090P.txt
C:\Data\Clients\COLD\AC3100P.txt
C:\Data\Clients\COLD\AC3150P.txt
C:\Data\Clients\COLD\AC3200P.txt
C:\Data\Clients\COLD\AC3600P.txt
C:\Data\Clients\COLD\AC3652P.txt
C:\Data\Clients\COLD\AC5715P.txt
C:\Data\Clients\COLD\AC5720P.txt
C:\Data\Clients\COLD\AC5725P.txt

filelistB.txt 看起来像:
AC3060P
AC3090P
AC3100P
AC3150P
AC3200P
AC3600P
AC3652P
AC5715P
AC5720P
AC5725P

我想制作 FileListCSV.txt,看起来像这样:
C:\Data\Clients\FWBT\COLD\AC3060P.txt,AC3060P
C:\Data\Clients\FWBT\COLD\AC3090P.txt,AC3090P
C:\Data\Clients\FWBT\COLD\AC3100P.txt,AC3100P
C:\Data\Clients\FWBT\COLD\AC3150P.txt,AC3150P
C:\Data\Clients\FWBT\COLD\AC3200P.txt,AC3200P
C:\Data\Clients\FWBT\COLD\AC3600P.txt,AC3600P
C:\Data\Clients\FWBT\COLD\AC3652P.txt,AC3652P
C:\Data\Clients\FWBT\COLD\AC5715P.txt,AC5715P
C:\Data\Clients\FWBT\COLD\AC5720P.txt,AC5720P
C:\Data\Clients\FWBT\COLD\AC5725P.txt,AC5725P

如果可以一次性完成所有这些,我也愿意将 SED 用于 Windows。但是,我想这应该是可以在几分钟内用 VBscript 完成的东西。

【问题讨论】:

    标签: text file csv vbscript batch-file


    【解决方案1】:

    此 Windows 批处理文件将执行您想要的操作,而无需中间文件。

    @ECHO OFF
    
    FOR %%i IN (*.txt) DO ECHO %%~fi,%%~ni
    

    您可以通过像这样重定向输出来将此批次的输出保存到文本文件中:

    MyBatch.cmd>>Output.txt
    

    【讨论】:

    • 您应该提到这适用于原始文件,而不是 OP 提到的两个列表文件。
    • 这一次完成了我想要的一切。我知道它可以在 Linux 中使用 SED 来完成,但 Windows 让我很难过。非常感谢。
    【解决方案2】:

    这可能是 SQLite shell 的工作。

    C:\Temp> sqlite3.exe
    create table paths(path text);
    create table filenames(fname text);
    .import fileListA.txt paths
    .import fileListB.txt filenames
    .separator ,
    .output FileListCSV.txt
    select * from paths p join filenames f on f.rowid = p.rowid;
    .q
    

    SQLite shell 是一个单一的可执行文件,它可以以文件的形式创建一个持久的 SQLite 数据库,或者在内存中创建一个数据库(就像这里一样,在命令行中没有任何参数)。

    【讨论】:

    • 听起来是个好主意。但是,我尝试粘贴您的命令并收到语法错误。我还尝试使用该命令创建一个批处理文件(concat.bat),但出现错误。
    • 这是我在尝试粘贴时遇到的错误截图:images.devs-on.net/Image/2K38k2eXztOT2lA-CommandPromptsql.png
    • 您不应该在点命令前放置空格(.import 等)。
    【解决方案3】:

    这可以在 EasyMorph 中使用“追加列”模式下的追加转换非常快地完成。

    【讨论】: