Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何在批处理文件中按字符数拆分字符串?_Windows_Batch File_Split_Batch Processing - Fatal编程技术网

Windows 如何在批处理文件中按字符数拆分字符串?

Windows 如何在批处理文件中按字符数拆分字符串?,windows,batch-file,split,batch-processing,Windows,Batch File,Split,Batch Processing,我有大约6GB的各种文本文件,这些文件有许多行,但每个记录都缺少逗号,因此所有数据都在一条记录中。我想创建一个批处理文件,可以在每个“记录”的适当位置添加逗号。我希望添加逗号,以便将其导入数据库 例如,文件的结构如下所示 IDnameADDRESSphoneEMAILetc IDnameADDRESSphoneEMAILetc IDnameADDRESSphoneEMAILetc 我知道每个字段都有一个唯一的长度,并且在所有文件之间都是静态的。 比如说 ID - 10 characters N

我有大约6GB的各种文本文件,这些文件有许多行,但每个记录都缺少逗号,因此所有数据都在一条记录中。我想创建一个批处理文件,可以在每个“记录”的适当位置添加逗号。我希望添加逗号,以便将其导入数据库

例如,文件的结构如下所示

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保持不变。我们只是从文件中读取。