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

[已解决][20元红包]按文本内容日期移动到自建日期目录求助

本帖最后由 lzymbz 于 2022-11-14 13:11 编辑

图片好像上传不了,我用文本说明一下,内容大值如下

Station_Id_C Year Mon Day Hour PRS PRS_Sea PRS_Max PRS_Min .............
59838 2020 10 12 16 1006.4000 1007.4000 .......
........................

59842 2020 10 15 16 1006.9000 1010.7000........

文本分隔符为空格,第二行有开始时间,最后一行有结束时间,分别是年月日时,现在希望能通过读取内容第二行及最后一行自动在当前目录建立2020 10 12 16-2020 10 15 16目录,并将当前文本文件移动到所建目录,如果文本没有检测到日期信息,可以跳过。如果能在整个文件处理完后将刚建的目录里面有多少个文件能统计出来,形成类似2020 10 12 16-2020 10 15 16(4)这样的目录,告诉我这个里面有4个文件那就更好了。
简单说就是一个按照文件所含数据日期时间对文件进行分类存档的小工具,本人小白,没有找到现有工具,感谢伸出援手的各位老师。

文件下载地址
https://wwu.lanzoue.com/b04p8bina
密码:aiji


联系方式:lzymbz,
支付与微信都为此号

  1. <# :
  2. @echo off
  3. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
  4. pause
  5. #>
  6. dir *.txt|%{$start_time=(gc $_)[1].split(" ");$end_time=(gc $_)[-1].split(" ");$d=$start_time[1]+" "+$start_time[2]+" "+$start_time[3]+" "+$start_time[4]+"-"+$end_time[1]+" "+$end_time[2]+" "+$end_time[3]+" "+$end_time[4];if(Test-Path $d){Move-Item $_ $d}else{md $d;Move-Item $_ $d}}
  7. dir |%{if($_ -is [System.IO.DirectoryInfo]){$oldname=$_.FullName;$n=dir $_|Measure-Object|Select-Object -ExpandProperty count;$newname=$oldname+"("+$n+")";ren $oldname $newname}}
复制代码

TOP

  1. <# :
  2. cls&echo off&cd /d "%~dp0"&mode con lines=5000
  3. set "self=%~f0"
  4. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal \"%~f0\"|Out-String|Invoke-Expression"
  5. pause
  6. exit
  7. #>
  8. $self=get-item -literal $env:self;
  9. $current=$self.Directory.FullName;
  10. $enc=[Text.Encoding]::GetEncoding('GB2312');
  11. $dic=@{};
  12. $files=@(dir -literal $current|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
  13. for($i=0;$i -lt $files.length;$i++){
  14.     $text=[IO.File]::ReadAllText($files[$i].FullName, $enc);
  15.     $arr=$text.trim().split("`r`n", [StringSplitOptions]::RemoveEmptyEntries);
  16.     if($arr.length -ge 3){
  17.         $m1=[regex]::match($arr[1].trim(), '^\S+\s+(\d{4}\s+\d+\s+\d+\s+\d+)');
  18.         $m2=[regex]::match($arr[$arr.length-1].trim(), '^\S+\s+(\d{4}\s+\d+\s+\d+\s+\d+)');
  19.         if($m1.Success -and $m2.Success){
  20.             $brr=$m1.groups[1].value -split '\s+';
  21.             $crr=$m2.groups[1].value -split '\s+';
  22.             $starttime='{0} {1} {2} {3}' -f $brr[0], $brr[1].PadLeft(2,'0'), $brr[2].PadLeft(2,'0'), $brr[3].PadLeft(2,'0');
  23.             $endtime='{0} {1} {2} {3}' -f $crr[0], $crr[1].PadLeft(2,'0'), $crr[2].PadLeft(2,'0'), $crr[3].PadLeft(2,'0');
  24.             $renge=$starttime+'-'+$endtime;
  25.             if(-not $dic.ContainsKey($renge)){
  26.                 $drr=New-Object -TypeName System.Collections.ArrayList;
  27.                 $dic.add($renge, $drr);
  28.             }
  29.             [void]$dic[$renge].add($files[$i]);
  30.         }
  31.     }
  32. }
  33. foreach($k in $dic.Keys){
  34.     $newfolder=$k+' ('+$dic[$k].count.toString()+')';
  35.     $newpath=$current+'\'+$newfolder+'\';
  36.     if(-not (test-path -literal $newpath)){[void][IO.Directory]::CreateDirectory($newpath);}
  37.     for($i=0;$i -lt $dic[$k].count;$i++){
  38.         write-host ($dic[$k][$i].Name+' --> '+$newfolder);
  39.         move-item -literal $dic[$k][$i].FullName $newpath -force -ErrorAction SilentlyContinue;
  40.     }
  41.     write-host "`r`n";
  42. }
复制代码
1

评分人数

提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 2# pd1


    抱歉,好像没有达到需求,谢谢你

TOP

回复 4# lzymbz


    你问题解决了就行,不过没听懂哪个需求没达到

TOP

本帖最后由 pd1 于 2022-11-14 15:19 编辑

TOP

返回列表