我有一百万个旧文本文件,我需要转换格式。我一直在拼命想要这样做,但我真的可以帮忙。我正在尝试转换看起来像这样的数据:
文本
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"
答案 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