标题: [已解决][20元红包]按文本内容日期移动到自建日期目录求助 [打印本页]
作者: lzymbz 时间: 2022-11-14 11:34 标题: [已解决][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,
支付与微信都为此号
作者: pd1 时间: 2022-11-14 12:42
- <# :
- @echo off
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
- pause
- #>
- 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}}
- dir |%{if($_ -is [System.IO.DirectoryInfo]){$oldname=$_.FullName;$n=dir $_|Measure-Object|Select-Object -ExpandProperty count;$newname=$oldname+"("+$n+")";ren $oldname $newname}}
复制代码
作者: zaqmlp 时间: 2022-11-14 13:00
- <# :
- cls&echo off&cd /d "%~dp0"&mode con lines=5000
- set "self=%~f0"
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal \"%~f0\"|Out-String|Invoke-Expression"
- pause
- exit
- #>
- $self=get-item -literal $env:self;
- $current=$self.Directory.FullName;
- $enc=[Text.Encoding]::GetEncoding('GB2312');
- $dic=@{};
- $files=@(dir -literal $current|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
- for($i=0;$i -lt $files.length;$i++){
- $text=[IO.File]::ReadAllText($files[$i].FullName, $enc);
- $arr=$text.trim().split("`r`n", [StringSplitOptions]::RemoveEmptyEntries);
- if($arr.length -ge 3){
- $m1=[regex]::match($arr[1].trim(), '^\S+\s+(\d{4}\s+\d+\s+\d+\s+\d+)');
- $m2=[regex]::match($arr[$arr.length-1].trim(), '^\S+\s+(\d{4}\s+\d+\s+\d+\s+\d+)');
- if($m1.Success -and $m2.Success){
- $brr=$m1.groups[1].value -split '\s+';
- $crr=$m2.groups[1].value -split '\s+';
- $starttime='{0} {1} {2} {3}' -f $brr[0], $brr[1].PadLeft(2,'0'), $brr[2].PadLeft(2,'0'), $brr[3].PadLeft(2,'0');
- $endtime='{0} {1} {2} {3}' -f $crr[0], $crr[1].PadLeft(2,'0'), $crr[2].PadLeft(2,'0'), $crr[3].PadLeft(2,'0');
- $renge=$starttime+'-'+$endtime;
- if(-not $dic.ContainsKey($renge)){
- $drr=New-Object -TypeName System.Collections.ArrayList;
- $dic.add($renge, $drr);
- }
- [void]$dic[$renge].add($files[$i]);
- }
- }
- }
- foreach($k in $dic.Keys){
- $newfolder=$k+' ('+$dic[$k].count.toString()+')';
- $newpath=$current+'\'+$newfolder+'\';
- if(-not (test-path -literal $newpath)){[void][IO.Directory]::CreateDirectory($newpath);}
- for($i=0;$i -lt $dic[$k].count;$i++){
- write-host ($dic[$k][$i].Name+' --> '+$newfolder);
- move-item -literal $dic[$k][$i].FullName $newpath -force -ErrorAction SilentlyContinue;
- }
- write-host "`r`n";
- }
复制代码
作者: lzymbz 时间: 2022-11-14 14:15
回复 2# pd1
抱歉,好像没有达到需求,谢谢你
作者: pd1 时间: 2022-11-14 15:18
回复 4# lzymbz
你问题解决了就行,不过没听懂哪个需求没达到
作者: pd1 时间: 2022-11-14 15:18
本帖最后由 pd1 于 2022-11-14 15:19 编辑
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |