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

Batch file 需要帮助编写批处理文件以将多个文件处理为逗号分隔的文本文件吗,batch-file,Batch File,我有一百万个旧文本文件需要转换格式。我一直在拼命尝试自己做这件事,但我真的需要帮助。我正在尝试转换如下所示的数据: 文本 11111.111 22222.222 33333.333 text2 44444.444 55555.555 666.666 777.777 88888.888 99999.999 (每个数字都在一个单独的行上,有一些空行,但我需要它们作为一个地方管理员进入输出文件) 放入一个如下所示的.txt文件: **我还需要在每一行的开头添加一个递增数字来对行进行编号 111111.

我有一百万个旧文本文件需要转换格式。我一直在拼命尝试自己做这件事,但我真的需要帮助。我正在尝试转换如下所示的数据:

文本
11111.111
22222.222
33333.333
text2
44444.444
55555.555
666.666

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

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

111111.1112222.222333.333,文本
244444.445555.55566666.666,文本2
377777.7778888.88899999.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
:重新格式化
对于(*)中的%%F,如果不%%XF==.BAT,则执行此操作(
SETLOCAL DISABLEDELAYEDEXPANSION
(
设置/P行1=
设置/P行2=
设置/P第3行=
设置/P第4行=
)>“%%F”.TXT
暂停>NUL
:结束
我使用的是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"
@echo关闭
setlocal enableDelayedExpansion
对于(*)中的/R%%F,请执行以下操作(
设置/a ln=0
对于/f%%N in('type“%%f”^ | find/c/v”“),请设置/a cnt=%%N/4
对于/l%%N in(11!cnt!)do(
对于(1 2 3 4)中的%%A,请执行以下操作(
设置“ln%%A=”
设置/p“ln%%A=”
)
集合/a项次+=1
回声!ln!,!ln2!,!ln3!,!ln4!,!ln1!
)
)“%%F.CSV”

只需一些修改:

set/p
如果输入为空,则不会删除变量,因此必须先删除它

你错过了一个结束语(这些

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

柜台

@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
@echo关闭
SETLOCAL ENABLEDELAYEDEXPANSION
设置计数=0
对于(*)中的%%F,如果不%%XF==.BAT,则执行此操作(
设置“LINE1=”
设置“LINE2=”
设置“LINE3=”
设置“LINE4=”
设置计数+=1
(
设置/P行1=
设置/P行2=
设置/P第3行=
设置/P第4行=
)>“%%F.txt”
)
暂停>NUL
:结束

只使用纯本机批处理:

@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"

这是一个五行记录,1个文本,3个数字,1个空白?我相信OP想要处理每个文件中的所有行,而不仅仅是前4行。@dbenham:我不确定,他想要什么。“一百万个转换格式的文件”意味着,他想要一百万个输出文件。但是“需要一个递增的数字”意味着,他想要一个单一的输出文件。也许我们都错了。我也不知道如何阅读他的例子:这是一个文件还是这三个文件,每个文件有4行。是的,我也很难解释这个问题。我不确定“text”和“text2”是一个文件中的行还是文件名。但是OP明确地提到了空白行是重要的,我不知道输出是如何可能的,除非“text”、“text 2”和空白行都表示一个文件中的行。@ dBehan:可能是一些文件有一个空的第一行。让我们等待OP回答我们的问题^^文本是文件中的文本字符串,它是一个描述符,告诉我下面的数字是什么意思,一些描述符被省略了。我还需要它来处理前四行以外的内容。有些文件中最多有200行。非常感谢你帮助我。我欠你一杯啤酒好先生!!!哇,好的,我会冷静下来,非常感谢这让我很沮丧,我没有想到把lookp放在里面并为它设置另一个变量,你的代码工作得非常完美。我添加了/r选项,并将.txt改为.csv,这样就可以与我的其他软件一起使用,而无需进一步转换。说真的,非常感谢你。这是最后的工作代码,它将使我在办公室里少活一年。我将发布上面修改过的代码,以防其他人也需要同样的东西。为什么不接受这个答案,那么这个问题将从公开和未回答的问题中删除!
@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"
)