[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 newswan 于 2021-6-23 14:39 编辑

基本看明白了,用excel做比较好

处理1个文件
powershell
  1. $file = "1.txt"
  2. $fc = get-content $file
  3. $i = 0
  4. while ($i -le $fc.count)
  5. {
  6.     if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
  7.     {
  8.         $a = $fc[$i] -split "\s\s\s*"
  9.         $a[5] = $a[5] -replace "\sm",""
  10.         while ($fc[$i+1] -match "^\s{11}\S")
  11.         {
  12.             $a[2] = $a[2] + " " + $fc[$i+1].trim()
  13.             $i += 1
  14.         }
  15.         if (-not ($fc[$i+1] -match "^\s{11}\S"))
  16.         {
  17.             $a
  18.         }
  19.     }
  20.     $i += 1
  21. }
复制代码
1

评分人数

TOP

本帖最后由 newswan 于 2021-6-23 13:46 编辑

4 楼样本 提取结果
  1. 1
  2. PIPE, SMLS, HG/T 20553, ASTM A312 TP316L, SAWN END, CS 1000-27, DN200 - 219.1 X 4
  3. 200
  4. I512912
  5. 2.1
  6. 2
  7. PIPE, SMLS, HG/T 20553, ASTM A312 TP316L, SAWN END, CS 1000-27, DN150 - 168.3 X 3.6
  8. 150
  9. I512911
  10. 1.6
  11. 3
  12. PIPE, SMLS, HG/T 20553, ASTM A312 TP316L, SAWN END, CS 1000-27, DN50 - 60.3 X 2.9
  13. 50
  14. I512906
  15. 0.3
  16. 4
  17. PIPE, SMLS, HG/T 20553, ASTM A312 TP316L, SAWN END, CS 1000-27, DN25 - 33.7 X 2.6
  18. 25
  19. I512903
  20. 0.3
  21. 5
  22. PIPE, SMLS, HG/T 20553, ASTM A312 TP316L, SAWN END, CS 1000-27, DN20 - 26.9 X 2
  23. 20
  24. I512902
  25. 0.2
  26. 6
  27. CONCENTRIC REDUCER, SMLS, GB/T 12459, R(C), ASTM A312 TP316L, WELD PREP. ACC. TO CS 416, ENDPREP. ACC. TO CS 416, CS 1000-28, DN200 X 150 - 219.1 X 4/168.3 X 3.6
  28. 200X150
  29. I512654
  30. 1
  31. 7
  32. ELBOW 90 C, SMLS, GB/T 12459, 90E(L), ASTM A312 TP316L, WELD PREP. ACC. TO CS 416, CS 1000-28, DN200 - 219.1 X 4
  33. 200
  34. I512504
  35. 1
  36. 8
  37. ELBOW 90 C, SMLS, GB/T 12459, 90E(L), ASTM A312 TP316L, WELD PREP. ACC. TO CS 416, CS 1000-28, DN50 - 60.3 X 2.9
  38. 50
  39. I512498
  40. 1
  41. 9
  42. WELDNECK FLANGE, EN 1092-1, TYPE 11, SA 182 F316L, PN10, FLANGE CONTACT FACE TO FORM B1 DIN EN 1092-1, ENDPREP. ACC. TO CS 416, CS 1000-34, DN200 - 219.1 X 4
  43. 200
  44. I512820
  45. 1
  46. 10
  47. WELDNECK FLANGE, EN 1092-1, TYPE 11, SA 182 F316L, PN16, FLANGE CONTACT FACE TO FORM B1 DIN EN 1092-1, ENDPREP. ACC. TO CS 416, CS 1000-34, DN150 - 168.3 X 3.6
  48. 150
  49. I512819
  50. 1
  51. 11
  52. WELDNECK FLANGE, EN 1092-1, TYPE 11, SA 182 F316L, PN16, FLANGE CONTACT FACE TO FORM B1 DIN EN 1092-1, ENDPREP. ACC. TO CS 416, CS 1000-34, DN50 - 60.3 X 2.9
  53. 50
  54. I512814
  55. 1
  56. 12
  57. WELDNECK FLANGE, EN 1092-1, TYPE 11, SA 182 F316L, PN40, FLANGE CONTACT FACE TO FORM B1 DIN EN 1092-1, ENDPREP. ACC. TO CS 416, CS 1000-34, DN25 - 33.7 X 2.6
  58. 25
  59. I512799
  60. 1
  61. 13
  62. BLIND FLANGE, EN 1092-1, TYPE 05, SA 182 F316L, PN40, CONTACT FACE- FORM A EN 1092-1, CS 1000-37, DN25
  63. 25
  64. I512946
  65. 1
  66. 14
  67. WELDNECK FLANGE, EN 1092-1, TYPE 11, SA 182 F316L, PN40, FLANGE CONTACT FACE TO FORM B1 DIN EN 1092-1, ENDPREP. ACC. TO CS 416, CS 1000-34, DN20 - 26.9 X 2
  68. 20
  69. I512798
  70. 1
  71. 15
  72. GASKET, DIN EN 1514-1-IBC, NQ, 1.4401/GRAPHITE/1.4571, PN16,  WN 1000-841 DN 200 THICKNESS 1.6
  73. 200
  74. I224625
  75. 1
  76. 16
  77. GASKET, DIN EN 1514-1-IBC, NQ, 1.4401/GRAPHITE/1.4571, PN16,  WN 1000-841 DN 150 THICKNESS 1.6
  78. 150
  79. I224624
  80. 2
  81. 17
  82. GASKET, DIN EN 1514-1-IBC, NQ, 1.4401/GRAPHITE/1.4571, PN40,  WN 1000-841 DN 50 THICKNESS 1.6
  83. 50
  84. I224645
  85. 1
  86. 18
  87. GASKET, DIN EN 1514-1-IBC, NQ, 1.4401/GRAPHITE/1.4571, PN40,  WN 1000-841 DN 25 THICKNESS 1.6
  88. 25
  89. I224638
  90. 2
  91. 19
  92. GASKET, DIN EN 1514-1-IBC, NQ, 1.4401/GRAPHITE/1.4571, PN40,  WN 1000-841 DN 20 THICKNESS 1.6
  93. 20
  94. I224636
  95. 1
  96. 20
  97. SCREWED CONNECTION, DIN EN ISO 4017/4032, A2-70, CS 1000-16, NUT (H=0.9XD) M20 X 70
  98. 20
  99. I91453
  100. 16
  101. 21
  102. SCREWED CONNECTION, DIN EN ISO 4017/4032, A2-70, CS 1000-16, NUT (H=0.9XD) M20 X 75
  103. 20
  104. I91454
  105. 8
  106. 22
  107. SCREWED CONNECTION, DIN EN ISO 4014/4032, A2-70, CS 1000-16, NUT (H=0.9XD) M16 X 65
  108. 16
  109. I91413
  110. 4
  111. 23
  112. SCREWED CONNECTION, DIN EN ISO 4014/4032, A2-70, CS 1000-16, NUT (H=0.9XD) M12 X 50
  113. 12
  114. I91371
  115. 4
  116. 24
  117. SCREWED CONNECTION, DIN EN ISO 4014/4032, A2-70, CS 1000-16, NUT (H=0.9XD) M12 X 55
  118. 12
  119. I91372
  120. 8
  121. 25
  122. ERROR READING SPECIALTY MATERIAL DESCRIPTION LIBRARY
  123. 150
  124. V710RE11F3121
  125. 1
  126. 26
  127. SLIDE SHOE SIDE MOVABLE COMPANY STD WN8205-2 TYPE 5 (INS.-THK. 120 MM), UST37-2 WITH COATING COMPANY STANDARD WN 8110, SHOE-LENGTH 300 MM, CLAMPED
  128. 200
  129. S0W-200
  130. 1
  131. 1
  132. PIPE, SMLS, HG/T 20553, ASTM A312 TP316L, SAWN END, CS 1000-27, DN250 - 273 X 4
  133. 250
  134. I512913
  135. 0.5
  136. 2
  137. CONCENTRIC REDUCER, SMLS, GB/T 12459, R(C), ASTM A312 TP316L, WELD PREP. ACC. TO CS 416, ENDPREP. ACC. TO CS 416, CS 1000-28, DN250 X 200 - 273 X 4/219.1 X 4
  138. 250X200
  139. I512658
  140. 1
  141. 3
  142. ELBOW 90 C, SMLS, GB/T 12459, 90E(L), ASTM A312 TP316L, WELD PREP. ACC. TO CS 416, CS 1000-28, DN250 - 273 X 4
  143. 250
  144. I512505
  145. 1
  146. 4
  147. BLIND DISC, CS 473 PN 10 SERIES 2, SA 240 316L, FLANGE MOUNTING DIMENSION, PN10, CLAMPED PART CONTACT FACE FORM A DIN EN 1092-1, CS 1000-33, DN200
  148. 200
  149. I512980
  150. 1
  151. 5
  152. WELDNECK FLANGE, EN 1092-1, TYPE 11, SA 182 F316L, PN10, FLANGE CONTACT FACE TO FORM B1 DIN EN 1092-1, ENDPREP. ACC. TO CS 416, CS 1000-34, DN250 - 273 X 4
  153. 250
  154. I512821
  155. 1
  156. 6
  157. WELDNECK FLANGE, EN 1092-1, TYPE 11, SA 182 F316L, PN10, FLANGE CONTACT FACE TO FORM B1 DIN EN 1092-1, ENDPREP. ACC. TO CS 416, CS 1000-34, DN200 - 219.1 X 4
  158. 200
  159. I512820
  160. 2
  161. 7
  162. GASKET, DIN EN 1514-1-IBC, NQ, 1.4401/GRAPHITE/1.4571, PN10,  WN 1000-841 DN 250 THICKNESS 1.6
  163. 250
  164. I224614
  165. 1
  166. 8
  167. GASKET, DIN EN 1514-1-IBC, NQ, 1.4401/GRAPHITE/1.4571, PN16,  WN 1000-841 DN 200 THICKNESS 1.6
  168. 200
  169. I224625
  170. 3
  171. 9
  172. SCREWED CONNECTION, DIN EN ISO 4017/4032, A2-70, CS 1000-16, NUT (H=0.9XD) M20 X 75
  173. 20
  174. I91454
  175. 8
  176. 10
  177. SCREWED CONNECTION, DIN EN ISO 4014/4032, A2-70, CS 1000-16, NUT (H=0.9XD) M20 X 85
  178. 20
  179. I91456
  180. 8
  181. 11
  182. SCREWED CONNECTION, DIN EN ISO 4014/4032, A2-70, CS 1000-16, NUT (H=0.9XD) M20 X 80
  183. 20
  184. I91455
  185. 12
  186. 12
  187. BELLOWS SEAL VALVE, HANDWHEEL, CLIMBING, V2436W, 1.4581, 1.4571, 1.4408, 1.4404, PN10, FLANGE CONTACT FACE TO FORM B1 DIN EN 1092-1, WN 8480, DN 200
  188. 200
  189. I372364
  190. 1
复制代码

TOP

本帖最后由 newswan 于 2021-6-23 14:45 编辑

回复 10# jave000


    改一下啊,trim 必须带括号  trim()

选其中一句,插入为第一行,保存为bat
  1. @powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & exit /b
  2. @powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause & exit
  3. #&cls&@Powershell "& {[ScriptBlock]::Create("'#' + (gc '%~f0' -raw)").Invoke()}" & pause & exit
  4. #&cls&@Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
  5. #&cls&@powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause&exit
复制代码

TOP

本帖最后由 newswan 于 2021-6-23 14:51 编辑
  1. $fileSour = "1.txt"
  2. $fileDest = "11.txt"
  3. $fc = get-content $fileSour
  4. [System.Collections.ArrayList] $da = @()
  5. $i = 0
  6. while ($i -le $fc.count)
  7. {
  8.     if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
  9.     {
  10.         $a = $fc[$i] -split "\s\s\s*"
  11.         $a[5] = $a[5] -replace "\sm",""
  12.         while ($fc[$i+1] -match "^\s{11}\S")
  13.         {
  14.             $a[2] = $a[2] + " " + $fc[$i+1].trim()
  15.             $i += 1
  16.         }
  17.         if (-not ($fc[$i+1] -match "^\s{11}\S"))
  18.         {
  19.             $da.add($a -join "`t") | out-null
  20.         }
  21.     }
  22.     $i += 1
  23. }
  24. $da | out-file $fileDest
复制代码

TOP

处理目录下多个文件
  1. $pathSour = "a"
  2. $fileDest = "11.txt"
  3. [System.Collections.ArrayList] $da = @()
  4. get-childitem -path $pathSour *.rpt | foreach-object {
  5.     $fc = get-content $_
  6.     $i = 0
  7.     while ($i -le $fc.count)
  8.     {
  9.         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
  10.         {
  11.             $a = $fc[$i] -split "\s\s\s*"
  12.             $a[5] = $a[5] -replace "\sm",""
  13.             while ($fc[$i+1] -match "^\s{11}\S")
  14.             {
  15.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  16.                 $i += 1
  17.             }
  18.             if (-not ($fc[$i+1] -match "^\s{11}\S"))
  19.             {
  20.                 $da.add($a -join "`t") | out-null
  21.             }
  22.         }
  23.         $i += 1
  24.     }
  25. }
  26. $da | out-file $fileDest
复制代码

TOP

文件是 prt 还是 rpt ?

TOP

本帖最后由 newswan 于 2021-6-23 15:25 编辑

回复 19# jave000

    改这一句,4个空格分列
  1. $a = $fc[$i].trim() -split "\s{4,}*"
复制代码

TOP

本帖最后由 newswan 于 2021-6-23 15:39 编辑

如果 保留m ,删除这一句
  1. $a[-1] = $a[-1] -replace "\sm",""
复制代码

TOP

回复 23# jave000


    修改路径 $pathsour

TOP

回复 25# jave000

发现有这么一行,2个空格分隔
  1.   12    BELLOWS SEAL VALVE, HANDWHEEL, CLIMBING,  200          I372364            1
复制代码
暂时,解决办法,你先找例外情况,手动修改空格
或者导出的时候,导出为csv格式
找到所有例外情况,看看情况再决定

TOP

  1. $pathSour = "."
  2. $fileDest = "11.txt"
  3. [System.Collections.ArrayList] $da = @()
  4. get-childitem -path $pathSour *.rpt | foreach-object {
  5.     $fc = get-content $_
  6.     $i = 0
  7.     while ($i -le $fc.count)
  8.     {
  9.         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
  10.         {
  11.             $a = @("") * 6
  12.             $a[1] =$fc[$i].substring(0,4).trim()
  13.             $a[2] =$fc[$i].substring(4,46).trim()
  14.             $a[3] =$fc[$i].substring(50,13).trim()
  15.             $a[4] =$fc[$i].substring(63,18).trim()
  16.             $a[5] =$fc[$i].substring(81).trim()
  17.             #$a = $fc[$i] -split "\s{2,}"
  18.             #$a[-1] = $a[-1] -replace "\sm",""
  19.             while ($fc[$i+1] -match "^\s{11}\S")
  20.             {
  21.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  22.                 $i += 1
  23.             }
  24.             if (-not ($fc[$i+1] -match "^\s{11}\S"))
  25.             {
  26.                 $da.add($a -join "`t") | out-null
  27.             }
  28.         }
  29.         $i += 1
  30.     }
  31. }
  32. $da | out-file $fileDest
复制代码
按长度截取也可以
1

评分人数

TOP

本帖最后由 newswan 于 2021-6-24 00:00 编辑
  1. $Excel = New-Object -ComObject Excel.Application
  2. $Excel.Visible = $true
  3. $Workbook = $Excel.Workbooks.Add()
  4. $Sheet = $Workbook.Worksheets.Item(1)
  5. for ($i =1 ; $i -le $da.count ; $i++)
  6. {
  7.     $Sheet.cells($i,1).value = $da[$i-1]
  8. }
  9. $colA=$sheet.range("A1").EntireColumn
  10. $colrange=$sheet.range("A1")
  11. $colA.texttocolumns($colrange,1,1,$true,$true,$false,$false,$false)
  12. $sheet.columns.autofit()
  13. $Workbook.SaveAs(($PSScriptRoot + "\" + $fileDest))
  14. $excel.Quit()
复制代码
生成 excel 文件 加到后面
1

评分人数

TOP

只需要保留 2 4 5 ?

TOP

本帖最后由 newswan 于 2021-6-24 00:18 编辑

回复 34# jave000


    我这里正确的,你检查下?
  1. $pathSour = "."
  2. $fileDest = "11"
  3. [System.Collections.ArrayList] $da = @()
  4. get-childitem -path $pathSour *.rpt | foreach-object {
  5.     $fc = get-content $_
  6.     for ($i = 0 ; $i -le $fc.count ; $i++)
  7.     {
  8.         if ($fc[$i] -match "^\s\s\s\d\s|^\s\s\d\d\s")
  9.         {
  10.             $a = @("") * 6
  11.             $a[1] =$fc[$i].substring(0,4).trim()
  12.             $a[2] =$fc[$i].substring(4,46).trim()
  13.             $a[3] =$fc[$i].substring(50,13).trim()
  14.             $a[4] =$fc[$i].substring(63,18).trim()
  15.             $a[5] =$fc[$i].substring(81).trim()
  16.             $a[5] = $a[5] -replace "\sm",""
  17.             while ($fc[$i+1] -match "^\s{11}\S")
  18.             {
  19.                 $a[2] = $a[2] + " " + $fc[$i+1].trim()
  20.                 $i += 1
  21.             }
  22.             if (-not ($fc[$i+1] -match "^\s{11}\S"))
  23.             {
  24.                 $da.add($a -join "`t") | out-null
  25.             }
  26.         }
  27.     }
  28. }
  29. $da | out-file ($fileDest + ".txt")
复制代码
1

评分人数

TOP

回复 35# jave000


    我还在下新的 office 2021版的

TOP

返回列表