【问题标题】:Need to split the file based on empty line using Batch script需要使用批处理脚本基于空行拆分文件
【发布时间】:2018-01-31 09:23:46
【问题描述】:

每当空记录开始时我需要拆分一个文件,文件在同一个文件中包含多个文件结构需要使用批处理脚本拆分文件。

重要的是,每个子文件都用空记录分隔

所以数据看起来像:test.csv

sno,employee name,address,location,zip code
1,aaaa,12/34,Hyderabad,500089
2,bbbb,12/35/44,chennai,500079
3,cccc,12/31/11,pune,500069

Cardnumber,cardname,card type,card limit
12345,visa,diamond,10000
2345,master,platinum,50000

Accno,bank name,branch code,Branch location
98765,sbi,23456,hyd
12457,citi,8765,usa
4444,axis,78767,India

我需要单独的文件,如下所示 测试1.csv

sno,employye name,address,location,zipcode
1,aaaa,12/34,Hyderabad,500089
2,bbbb,12/35/44,chennai,500079
3,cccc,12/31/11,pune,500069

Test2.csv

Cardnumber,cardname,card type,card limit
12345,visa,diamond,10000
2345,master,platinum,50000

Test3.csv

Accno,bank name,branch code,Branch location
98765,sbi,23456,hyd
12457,citi,8765,usa
4444,axis,78767,india

我尝试了下面的脚本,但它没有按预期工作。

@echo off & setlocal enabledelayedexpansion
set c=0
for /f "tokens=*" %%a in (test.csv) do (
if "%%a" equ "\n" (
set /a c+=1
>f!c!.csv echo.
) else (
>> f!c!.csv echo %%a
)
)

请帮我编写上述要求的批处理脚本。提前致谢

【问题讨论】:

  • 是唯一的标题行,以字母开头(如您的示例中)?
  • 我怀疑@Stephan,这些例子结合了来自多个银行和国家的数据。我不喜欢不知道自己在做什么的人可以访问如此敏感的信息的想法。 我不能等到新的通用数据保护条例在这里生效
  • @Stephen:不,详细记录也以字母开头,只是我用测试数据创建了示例文件,因为无法共享原始文件格式

标签: batch-file


【解决方案1】:

for /f 忽略空行。所以你需要一个小技巧来让 not 行为空。 find /n 为每一行添加一个行号,因此不再为空。

@echo off
setlocal enabledelayedexpansion
set c=0
for /f "tokens=1,* delims=]" %%a in ('type t.txt^|find /n /v ""') do (
  REM echo A %%a    B %%b
  if "%%b" equ "" (
    set /a c+=1
    >f!c!.csv echo.
  ) else (
    >> f!c!.csv echo %%b
  )
)

REM 行是故障排除后留下的,但我把它留在那里是因为它可以帮助您了解发生了什么。

【讨论】:

  • 感谢您的帮助,我可以拆分您提供的文件。我们还有一个要求..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
相关资源
最近更新 更多