Windows 如何在批处理文件中按字符数拆分字符串?
我有大约6GB的各种文本文件,这些文件有许多行,但每个记录都缺少逗号,因此所有数据都在一条记录中。我想创建一个批处理文件,可以在每个“记录”的适当位置添加逗号。我希望添加逗号,以便将其导入数据库 例如,文件的结构如下所示Windows 如何在批处理文件中按字符数拆分字符串?,windows,batch-file,split,batch-processing,Windows,Batch File,Split,Batch Processing,我有大约6GB的各种文本文件,这些文件有许多行,但每个记录都缺少逗号,因此所有数据都在一条记录中。我想创建一个批处理文件,可以在每个“记录”的适当位置添加逗号。我希望添加逗号,以便将其导入数据库 例如,文件的结构如下所示 IDnameADDRESSphoneEMAILetc IDnameADDRESSphoneEMAILetc IDnameADDRESSphoneEMAILetc 我知道每个字段都有一个唯一的长度,并且在所有文件之间都是静态的。 比如说 ID - 10 characters N
IDnameADDRESSphoneEMAILetc
IDnameADDRESSphoneEMAILetc
IDnameADDRESSphoneEMAILetc
我知道每个字段都有一个唯一的长度,并且在所有文件之间都是静态的。
比如说
ID - 10 characters
NAME - 40 characters
ADDRESS - 30 characters
etc
这将需要在一个持续的基础上运行,因为新的文件来了,所以我希望我可以给一个非技术人员,他们可以运行的东西。
有没有在bat文件中快速执行此操作的方法 使用上面的示例。请注意,我们从0开始计数字符,然后告诉集合使用以某个计数开始的字母,从该计数开始计算单词长度。有关布局,请参见底部
@echo off
setlocal enabledelayedexpansion
for /F "tokens=* delims=" %%a in (filename.txt) do (
set str=%%a
set id=!str:~0,2!
set na=!str:~2,4!
set add=!str:~6,7!
set ph=!str:~13,5!
set em=!str:~18,5!
set etc=!str:~23,3!
echo !id!,!na!,!add!,!ph!,!em!,!etc!
)
字符串中指定的字符为:
I D n a m e A D D R E S S p h o n e E M A I L e t c
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
ID从字符0开始,为2个字符,包括其本身:~0,2
名称从字符2开始,长度为4个字符:~2,4
等等
对于许多文件,只需添加另一个循环作为主循环或给出文件列表。使用上面的示例。请注意,我们从0开始计数字符,然后告诉集合使用以某个计数开始的字母,从该计数开始计算单词长度。有关布局,请参见底部
@echo off
setlocal enabledelayedexpansion
for /F "tokens=* delims=" %%a in (filename.txt) do (
set str=%%a
set id=!str:~0,2!
set na=!str:~2,4!
set add=!str:~6,7!
set ph=!str:~13,5!
set em=!str:~18,5!
set etc=!str:~23,3!
echo !id!,!na!,!add!,!ph!,!em!,!etc!
)
字符串中指定的字符为:
I D n a m e A D D R E S S p h o n e E M A I L e t c
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
ID从字符0开始,为2个字符,包括其本身:~0,2
名称从字符2开始,长度为4个字符:~2,4
等等
对于许多文件,只需添加另一个循环作为主循环或提供文件列表。根据您提供的示例,下面是一个快速powershell命令(尽管没有标记):
(GC'Report.txt'|选择-First 1)。插入(10,,)。插入(51,,)。插入(82,,)>“Fixed.txt”
它采用Report.txt
的第一行
10
字符后插入,
(0+10=10)+1
40
字符之后插入,
(11+40=51)+1
30
字符之后插入,
(52+30=82)+1
Fixed.txt
对于其他固定宽度的列大小,只需继续执行.Insert(,',')
序列,并确保已更改文件名以适应您的环境
编辑
以下内容作为对注释的更新以及后续编辑,应适用于文件中的所有行
GC'Report.txt'|%{($).Insert(10,,).Insert(51,,).Insert(82,,)}输出文件“Fixed.txt”
根据您提供的示例,下面是一个快速的powershell命令(尽管没有标记):
(GC'Report.txt'|选择-First 1)。插入(10,,)。插入(51,,)。插入(82,,)>“Fixed.txt”
它采用Report.txt
的第一行
10
字符后插入,
(0+10=10)+1
40
字符之后插入,
(11+40=51)+1
30
字符之后插入,
(52+30=82)+1
Fixed.txt
对于其他固定宽度的列大小,只需继续执行.Insert(,',')
序列,并确保已更改文件名以适应您的环境
编辑
以下内容作为对注释的更新以及后续编辑,应适用于文件中的所有行
GC'Report.txt'|%{($).Insert(10,,).Insert(51,,).Insert(82,,)}输出文件“Fixed.txt”
您可以使用SET
命令执行此操作。打开cmd提示符并键入:SET/?
阅读用法。您可以使用SET
命令执行此操作。打开cmd提示符并键入:SET/?
以读取用法。这似乎很有效,但只执行了文件的第1行。我怎么能让它贯穿每一行呢?Lahey先生,你的问题很明确,“各种文本文件,每个文件都有一条数据记录”
。很抱歉,当时我没有正确地表达它。每行有一条长记录,但每个文件有许多记录。它就像删除了所有逗号的CSV。我将编辑我的帖子。Lahey先生,我已经编辑了我的答案,加入了你修改过的参数。这似乎很有效,但只修改了文件的第1行。我怎么能让它贯穿每一行呢?Lahey先生,你的问题很明确,“各种文本文件,每个文件都有一条数据记录”
。很抱歉,当时我没有正确地表达它。每行有一条长记录,但每个文件有许多记录。它就像删除了所有逗号的CSV。我会编辑我的帖子。Lahey先生,我已经编辑了我的答案,加入了你修改过的参数。很抱歉,我不得不更新我的帖子。我错误地说每个文件都有一条记录,而我的意思是每个文件都有许多没有逗号的记录。@MrLahey Then xoncept保持不变。我们刚刚读了文件。对不起,我必须更新我的帖子。我错误地说每个文件都有一条记录,而我的意思是每个文件都有许多没有逗号的记录。@MrLahey Then xoncept保持不变。我们只是从文件中读取。