需要帮助编写批处理文件以将多个文件处理为逗号分隔的文本文件

时间:2014-06-20 19:23:30

标签: batch-file

我有一百万个旧文本文件,我需要转换格式。我一直在拼命想要这样做,但我真的可以帮忙。我正在尝试转换看起来像这样的数据:

文本
11111.111
22222.222
33333.333
文本2
44444.444
55555.555
66666.666

77777.777
88888.888
99999.999
(每个数字都在一条单独的行上,并且有一些空行,但我需要它们作为管理员进入输出文件)

进入如下所示的.txt文件:
**我还需要在每行的开头添加一个增量编号来对行进行编号。

1,11111.111,22222.222,33333.333,文本
2,44444.444,55555.555,66666.666,文本2
3,77777.777,88888.888,99999.999,

我所拥有的文件位于目录中的单独文件夹中,没有文件扩展名,但它们的行为与标准文本文件完全相同。

我尝试了各种各样的东西,但我不是那么精通编程。这是我第100次没删除的一小段代码。令人沮丧

:REFORMAT
FOR %%F IN (*) DO IF NOT %%~XF==.BAT (
SETLOCAL DISABLEDELAYEDEXPANSION
(
SET /P LINE1=
SET /P LINE2=
SET /P LINE3=
SET /P LINE4=
)<"%%F"
ECHO %LINE2%,%LINE3%,%LINE4%,%LINE1%>>"%%F".TXT
PAUSE >NUL
:END

我使用的是Windows,我可以访问dos6 dos7 winxp 32和win7 64

text和text2是文件中的文本字符串,它们是描述符,告诉我下面的数字是什么意思,并且遗漏了一些描述符。我还需要它来处理超过前四行。有些文件内部最多有200行。非常感谢你帮助我。非常感谢dbenham这里是最后的结果:

@echo off
setlocal enableDelayedExpansion
for /R %%F in (*.) do (
set /a ln=0
for /f %%N in ('type "%%F"^|find /c /v ""') do set /a cnt=%%N/4
for /l %%N in (1 1 !cnt!) do (
for %%A in (1 2 3 4) do (
  set "ln%%A="
  set /p "ln%%A="
)
set /a ln+=1
echo !ln!,!ln2!,!ln3!,!ln4!,!ln1!
)
) <"%%F" >"%%F.CSV"

2 个答案:

答案 0 :(得分:1)

只使用纯本机批次:

@echo off
setlocal enableDelayedExpansion
for %%F in (*.) do (
  set /a ln=0
  for /f %%N in ('type "%%F"^|find /c /v ""') do set /a cnt=%%N/4
  for /l %%N in (1 1 !cnt!) do (
    for %%A in (1 2 3 4) do (
      set "ln%%A="
      set /p "ln%%A="
    )
    set /a ln+=1
    echo !ln!,!ln2!,!ln3!,!ln4!,!ln1!
  )
) <"%%F" >"%%F.txt"

以上将处理当前文件夹中没有扩展名的所有文件。如果要递归地包含所有子文件夹,请将/R选项添加到外部FOR语句。

使用我的REPL.BAT utility

可以完成所有事情
@echo off
for %%F in (*.) do (
  <"%%F" repl "([^\r\n]*)\r?\n([^\r\n]*)\r?\n([^\r\n]*)\r?\n([^\r\n]*)\r?\n?" "$2,$3,$4,$1\r\n" mx|findstr /n "^"|repl "^(.*):" "$1," >"%%F.txt"
)

答案 1 :(得分:0)

只需进行一些修改:

如果输入为空,

set /p不会删除变量,因此您必须先将其删除。

你错过了一个关闭的paranthese )

您必须使用延迟扩展才能在parantheses中使用已更改的变量

柜台。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set count=0
FOR %%F IN (*.) DO IF NOT %%~XF==.BAT (
   set "LINE1="
   set "LINE2="
   set "LINE3="
   set "LINE4="
   set count+=1
  (
    SET /P LINE1=
    SET /P LINE2=
    SET /P LINE3=
    SET /P LINE4=
  )<"%%F"

  ECHO !count!,!LINE2!,!LINE3!,!LINE4!,!LINE1!>>"%%F.txt"
)
PAUSE >NUL
:END