2011-01-12 3 views
2

Я работаю с командой пакетных команд Windows, чтобы создать список файловых путей и имен файлов (без ext) для обработки и архивирования. Мне нужно создать файл CSV, который будет содержать путь к файлу и имени файла.Слияние двух текстовых файлов в один файл 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 \ Клиенты \ COLD \ AC3652P.txt
C: \ Data \ Clients \ COLD \ AC5715P.txt
C: \ Data \ Clients \ COLD \ AC5720P.txt
C: \ Data \ Клиенты \ 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 \ Клиенты \ FWBT \ COLD \ AC57 15P.txt, AC5715P
C: \ Data \ Clients \ FWBT \ COLD \ AC5720P.txt, AC5720P
C: \ Data \ Clients \ FWBT \ COLD \ AC5725P.txt, AC5725P

Я также открыта для использования SED для окон, если это может сделать все это одним выстрелом. Тем не менее, я бы предположил, что это должно быть чем-то, что можно взломать в VBscript за несколько минут.

ответ

3

Этот пакетный файл Windows сделает то, что вы хотите, без необходимости в промежуточных файлах.

@ECHO OFF 

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

Вы можете получить выход этой партии в текстовый файл, перенаправив вывод так:

MyBatch.cmd>>Output.txt 
+0

Следует упомянуть, что это работает с исходными файлами, а не с двумя файлами списка, о которых упоминает OP. – Joey

+0

Хорошая точка. Я обновил свой ответ, чтобы отразить это. – aphoria

+0

Это сделало все, что я хотел одним выстрелом. Я знал, что это может быть сделано с SED в Linux, но Windows меня насторожило. Большое спасибо. – shwabob

0

Это может быть работа для оболочки SQLite.

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 оболочка представляет собой единый исполняемый файл, который будет либо создать постоянную базу данных SQLite в виде файла, или создать базу данных в памяти (когда, как здесь, без каких-либо аргументов в командной строке).

+0

Звучит отличная идея. Однако я попытался вставить вашу команду и получил синтаксическую ошибку. Я также попытался создать командный файл (concat.bat) с помощью команды и получил ошибку. – shwabob

+0

Вот скриншот ошибки, которую я получил при попытке вставить: http://images.devs-on.net/Image/2K38k2eXztOT2lA-CommandPromptsql.png – shwabob

+0

Вы не должны помещать пробелы перед точками-командами ('. import' или такой). – Benoit

0

Это может быть сделано очень быстро в EasyMorph с помощью преобразования Append в «Append столбцы» режиме ,

Смежные вопросы