1

我有两个文本文件,分别是 A.txt 和 B.txt,内容如下:

一个.txt

value_a1,value_a2
value_b
value_c
value_d
value_e1,value_e2

B.txt

12,14
13
15
16
23,34

我想要输出文件 C.txt 作为

"value_a1","12","value_a2","14"
"value_b","13"
"value_c","15"
"value_d,"16"
"value_e1,"23","value_e2","34"

请指导我完成,因为我是批处理脚本的新手。

4

2 回答 2

3

以下代码将起作用:

    @Echo off

    echo. >>d.txt
    type b.txt >>d.txt

    set dec=1
    For /F "usebackq tokens=1,* delims=, " %%a in ("a.txt") do call :File1 %%a %%b
    set dec1=0
    del d.txt

    exit /b

    :File1
    SET str1=%~1
    SET str2=%~2
    SET Count=1
    For /F "usebackq tokens=1,* skip=%dec% delims=," %%A in ("d.txt") do call :File2   %%A %%B
    set /a dec=%dec%+1

    exit /b

    :File2
    SET str3=%~1
    SET str4="%~2"
    IF %Count% EQU 1 (
    IF %str4%=="" (
    echo "%str1%","%str3%" >>c.txt
    set /a Count=%Count%+1
    ) ELSE (
    echo "%str1%","%str3%","%str2%",%str4% >>c.txt
    set /a Count=%Count%+1) 
    )
    exit /b 
于 2013-01-28T15:52:11.627 回答
2

这个解决方案有很多限制,但它与纯原生批处理一样简单。它对于批处理解决方案也相当有效。

@echo off
setlocal enableDelayedExpansion
<b.txt >c.txt (
  for /f delims^=^ eol^= %%L in (a.txt) do (
    set "ln="
    set /p "ln="
    set "out="
    for %%A in (%%L) do (
      for /f "tokens=1* delims=," %%a in ("!ln!") do (
        set "out=!out!,"%%A","%%a""
        set "ln=%%b"
      )
      echo !out:~1!
    )
  )
)

限制:

  • A.TXT 不能包含*or?!
  • 如果 A.TXT 值包含任何<space> <tab> , ; =
  • A.TXT 最大行长度约为 8191 字节
  • B.TXT 不能包含!
  • B.TXT 值不能包含,(,严格来说是分隔符)
  • B.TXT 最大行长度为 1021 字节
  • B.TXT 行必须使用 Windows 风格的终止符(回车/换行),而不是 Unix 风格的(换行)

一些限制可以相当容易地克服。其他人则需要更多的努力,以至于变得完全不切实际。

于 2013-01-29T04:44:28.740 回答