Объединение 2 TXT-файлов в один файл с разделителями табуляции в пакетном режиме - PullRequest
7 голосов
/ 11 августа 2011

Я застрял с этим: Мне нужно объединить два текстовых файла в один текстовый файл с разделителями табуляции в пакетном скрипте. пример:

file1:

qwer
tyui
asdf

file2:

1345
6876
8796

file3:

qwer    1345
tyui    6876
asdf    8796

На самом деле все, что мне нужно, это эквивалент команды Unix: paste -d "\t" file1 file2 > file3

Ответы [ 3 ]

13 голосов
/ 12 августа 2011
 @echo off

 set f1=1.txt
 set f2=2.txt
 set "sep=  "  % tab %

 (
   for /f "delims=" %%a in (%f1%) do (
      setlocal enabledelayedexpansion
       set /p line=
       echo(%%a!sep!!line!
      endlocal
   )
 )<%f2%

pause
goto :eof
3 голосов
/ 26 ноября 2011

Ответ walid2me потрясающий, это лишь небольшая попытка показать, как обезопасить себя от таких символов, как !^ в файле 1.txt, содержимое файла 2.txt безопасно, его читают с синтаксисом set/p.

@echo off

 set f1=1.txt
 set f2=2.txt
 set "sep=  "  % tab %

 (
   setlocal DisableDelayedExpansion
   for /f "delims=" %%a in (%f1%) do (
      set "f1_line=%%a"
      setlocal EnableDelayedExpansion
       set /p f2_line=
       echo(!f1_line!!sep!!f2_line!
      endlocal
   )
   endlocal
 )<%f2%

pause
goto :eof

Как видите, я только перемещаю расширение %%a непосредственно перед setlocal EnableDelayedExpansion

Есть еще один небольшой недостаток, так как set/p убирает конечные управляющие символы, такие как одиночный CR, LF, а также TAB.
Это касается только файла 2.txt.

Углубленный анализ о set /p в Новая техника: set / p может читать несколько строк из файла

3 голосов
/ 11 августа 2011

Я не знаю ни одной родной команды Windows, которая бы это делала, но есть набор инструментов Unix для Windows здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...