如何按批处理文件中的字符数拆分字符串?
How to split a string by amount of characters in a batch file?
我有大约 6GB 的各种文本文件,这些文件有很多行,但每条记录都缺少逗号,所以所有数据都在 1 条记录中。我想创建一个批处理文件,我可以在每个 "record" 的适当位置添加逗号。我希望添加逗号,这样我就可以将其导入数据库。
例如,文件结构如下。
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
等等
对于许多文件,只需添加另一个循环作为主循环或提供文件列表。
根据您提供的示例,这是一个快速的 powershell 命令,(尽管没有标签):
(GC 'Report.txt' | Select -First 1).Insert(10,',').Insert(51,',').Insert(82,',') > 'Fixed.txt'
取第一行Report.txt
…
- 在
10
个字符后插入,
(0 + 10 = 10) + 1
- 之后再插入
40
个字符,
(11 + 40 = 51) + 1
- 之后再插入
30
个字符,
(52 + 30 = 82) + 1
- 等等
…然后将插入的行输出到 Fixed.txt
只需对其他固定宽度的列大小继续 .Insert(<number>,',')
序列,并确保您已更改文件名以适合您的情况。
编辑
以下内容作为对您评论的更新和后续编辑应该适用于文件中的所有行。
GC 'Report.txt' | % {($_).Insert(10,',').Insert(51,',').Insert(82,',')} | Out-File 'Fixed.txt'
我有大约 6GB 的各种文本文件,这些文件有很多行,但每条记录都缺少逗号,所以所有数据都在 1 条记录中。我想创建一个批处理文件,我可以在每个 "record" 的适当位置添加逗号。我希望添加逗号,这样我就可以将其导入数据库。
例如,文件结构如下。
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
等等
对于许多文件,只需添加另一个循环作为主循环或提供文件列表。
根据您提供的示例,这是一个快速的 powershell 命令,(尽管没有标签):
(GC 'Report.txt' | Select -First 1).Insert(10,',').Insert(51,',').Insert(82,',') > 'Fixed.txt'
取第一行Report.txt
…
- 在
10
个字符后插入,
(0 + 10 = 10) + 1 - 之后再插入
40
个字符,
(11 + 40 = 51) + 1 - 之后再插入
30
个字符,
(52 + 30 = 82) + 1 - 等等
…然后将插入的行输出到 Fixed.txt
只需对其他固定宽度的列大小继续 .Insert(<number>,',')
序列,并确保您已更改文件名以适合您的情况。
编辑
以下内容作为对您评论的更新和后续编辑应该适用于文件中的所有行。
GC 'Report.txt' | % {($_).Insert(10,',').Insert(51,',').Insert(82,',')} | Out-File 'Fixed.txt'