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

回复 4# 思想之翼


    若非 hawk :
给你来个 “大的”
  1. class CombineDigitHelper{
  2. [string]$directory; # a.txt; b.log;
  3. [string]$SplitDirectory; # 1234.txt; 1235.txt ...
  4. [object[]]$comb;        # 组合
  5. # 指定分割文本和总文本的目录
  6. CombineDigitHelper([string]$dir){
  7. if(![IO.Directory]::Exists($dir)){
  8. [IO.Directory]::CreateDirectory($dir);
  9. }
  10. $this.directory=$dir;
  11. $this.comb=@();
  12. $this.SplitDirectory=[IO.Path]::Combine($this.directory, "Split");
  13. if(![IO.Directory]::Exists($this.SplitDirectory)){
  14. [IO.Directory]::CreateDirectory($this.SplitDirectory);
  15. }
  16. }
  17. # 分割文件的组合,分割时要先运行此方法
  18. [void] CombDigit([string]$file, [int]$sel){
  19. $_f=[IO.Path]::Combine($this.directory, $file);
  20. $_o=[string[]](Get-Content $_f -ReadCount 0);
  21. $obj=1..$_o[0].Length;
  22. $select=[int[]]::new($sel);
  23. 0..($sel-1)|ForEach-Object{$select[$_]=$_}
  24. while($true){
  25. $str="";
  26. for($i=0; $i -lt $sel; $i++){$str+=$obj[$select[$i]].ToString()}
  27. $this.comb+=$str;
  28. if($select[$sel-1] -lt $obj.length-1){$select[$sel-1]++}
  29. else{
  30. $p=$sel-1;
  31. while(($p -gt 0) -and ($select[$p-1] -eq $select[$p]-1)){$p--}
  32. if($p -eq 0) {break;}
  33. $select[$p-1]++;
  34. for($j=$p; $j -lt $sel; $j++){
  35. $select[$j] =$select[$j-1]+1;
  36. }
  37. }
  38. }
  39. }
  40. # 制作总文本并指定每行为7个字符
  41. [void] MakeContent([string]$file, [int]$count){
  42. $this.MakeContent($file, $count, 7);
  43. }
  44. # 制作总文本并指定每行为任意个字符
  45. [void] MakeContent([string]$file, [int]$count, [int]$tol){
  46. # $source=[string[]]("1234567890abcdefghijklmnopqrstuvwxyz".ToCharArray());
  47. $source=1..9;
  48. $destfile=[IO.Path]::Combine($this.directory, $file);
  49. [IO.File]::CreateText($destfile).Close();
  50. for($i=0;$i-lt$count;$i++){
  51. $data=Get-Random -InputObject $source -Count $tol;
  52. Add-Content $destfile -Value (-join($data)) -Encoding Default -Force;
  53. }
  54. }
  55. # 分割文本
  56. [void] SplitContent([string]$sourceFile){
  57. if($this.comb.Length -eq 0){
  58. Write-Host '先生成文件组合再分割' -fore red;
  59. return;
  60. }
  61. $a=[IO.Path]::Combine($this.directory, $sourceFile);
  62. $Atxt=[string[]](Get-Content $a -ReadCount 0);
  63. foreach($txt in $this.comb){
  64. $file=[IO.Path]::Combine($this.SplitDirectory, "$txt.log");
  65. [IO.File]::CreateText($file).Close();
  66. $sb=[Text.StringBuilder]::new();
  67. for($j=0;$j -lt $Atxt.Length; $j++){
  68. if($Atxt[$j] -match '^$'){continue;}
  69. [string]$line="";
  70. for($i=0; $i -lt $txt.length; $i++){
  71. [int]$_i=[string]$txt[$i];
  72. $line+=$Atxt[$j][$_i-1];
  73. }
  74. [void]$sb.Append($line+"`r`n");
  75. }
  76. Set-Content $file -Value $sb.ToString().Trim() -Enc Default -NoNewline -Force;
  77. }
  78. }
  79. # 合并文本
  80. [void] MergeToFile([string]$destFile){
  81. $file=[IO.Path]::Combine($this.directory, $destFile);
  82. $outContentArr=@();
  83. $logs=[IO.Directory]::GetFiles($this.SplitDirectory, "*.log");
  84. $max=[Collections.Generic.HashSet[object]]($logs.Foreach{(Get-Item $_).BaseName.ToCharArray()});
  85. foreach($log in $logs){
  86. $bName=[string]([IO.Path]::GetFileNameWithoutExtension($log));
  87. $content=[string[]](Get-Content $log -ReadCount 0);
  88. if($outContentArr.Count -eq 0){
  89. for($i=0; $i -lt $content.Length; $i++){
  90. $outContentArr+=,[string[]]::new($max.Count);
  91. }
  92. $max.Clear();
  93. }
  94. for($i=0;$i -lt $content.Length;$i++){
  95. for($a=0; $a -lt $bName.Length; $a++){
  96. [int]$t=[string]$bName[$a]
  97. if(![string]::IsNullOrEmpty($outContentArr[$i][$t-1])){continue}
  98. $outContentArr[$i][$t-1]=$content[$i][$a];
  99. }
  100. }
  101. }
  102. $_out=@($outContentArr.ForEach{-join($_)}) -join "`r`n";
  103. Set-Content $file -Value $_out -Encoding Default -NoNewline  -Force;
  104. }
  105. # 删除合并文本和分割文本及相关目录
  106. [void] ClearTxt([bool]$delSubDir){
  107. if($null -ne $this.comb){$this.comb.Clear()}
  108. $this.comb=$null;
  109. try{
  110. [IO.Directory]::Delete($this.SplitDirectory, $true);
  111. [IO.Directory]::Delete($this.directory, $delSubDir);
  112. }catch{}
  113. }
  114. }
  115. # 食用,不要把脚本放在制作目录中 ;实例化,换成自己的目录
  116. $comb=[CombineDigitHelper]::new("F:\WinTemp\Temp\Combine\");
  117. # 生成随机数创建A.txt 1000=行数 8=每行字符数,默认为7,有现存的则不执行此句
  118. $comb.MakeContent("a.txt", 1000); # $comb.MakeContent("a.txt", 1000, 8);
  119. # 下面的方法按需要运行
  120. # 分割文本 4=按4个字符组合
  121. $comb.CombDigit("a.txt", 4);
  122. $comb.SplitContent("a.txt");
  123. # 合并文件
  124. $comb.MergeToFile("b.txt");
  125. # 清除文件,会清除所有文件,注意备份
  126. $comb.ClearTxt($false);
复制代码
1

评分人数

QQ: 458609586
脚本优先 [PowerShell win10]

TOP

修复第25行下标不正确(越界)
QQ: 458609586
脚本优先 [PowerShell win10]

TOP

返回列表