我有一个包含 1GB 数据的文件。该数据实际上是数十个或数千个单独的迷你文件。
我需要提取每个单独的文件并将它们放入自己单独的不同文件中。
所以本质上,我需要从单个文件变成 30K+ 单独的文件。
这是“我的文件”的示例。
文件名 1 版本 1 32 D
87年10月15日 87年9月29日
编制 ?????
修订者:???
描述 用户域
记录文件名 1 版本 1 D 后缀 -4541
100 05 ST-CTY-CDE-FMHA-4541 显示器
200 10 ST-CDE-FMHA-4541 9(2) 显示
300 10 CTY-CDE-FMHA-4541 9(3) 显示器
400 05 NME-CTY-4541 X(20) 显示器
500 05 最后更新日期 4541 9(06) 显示
600 05 FILLER X 显示 1 报告编号08
数据字典报告器 REL 17.0 09/23/21
第 2 页 报告 008
记录报告
-**************************************************** ****************************************************** **********************************
记录 记录 ---- 日期 ----
记录名称长度构建器类型
事件已更新已创建
****************************************************** ****************************************************** ********************************** 0
文件名2 版本 1 176 D
98年3月9日 84年2月21日
编制 ??????
修订者:????
定义
我需要根据位置 68、69 和 70 中 VER 的匹配来拆分文件。我还需要为每个文件唯一命名。该信息存储在同一行的位置 2-9 中。在上面的示例中,该字符串是“FILENAM1”和 FILENAM2”。
因此,仅使用上面的示例,我将创建两个输出文件,它们将被命名为 FILENAM1.txt 和 FILENAM2.txt。
由于我需要拆分超过 30K 个文件,因此手动执行此操作是不可能的。
我确实有一个脚本可以将一个文件拆分为多个文件,但它不会按位置搜索字符串。
有人能帮助我吗?
这是不起作用的脚本。希望我能屠宰它并得到一些有效的结果......
$InputFile = "C:\COPIES.txt"
$Reader = New-Object System.IO.StreamReader($InputFile)
$OPName = @()
While (($Line = $Reader.ReadLine()) -ne $null) {
If ($Line -match "VER"(67,3)) {
$OPName = $Line.(2,8)
$FileName = $OPName[1].Trim()
Write-Host "Found ... $FileName" -foregroundcolor green
$OutputFile = "$FileName.txt"
}
Add-Content $OutputFile $Line
}
先感谢您,
-Ron