2017-04-20 84 views
-2

我有一套文件在一个特定的文件夹, 我想从文件名读取日期, 选择最后2个日期文件和移动所有其他日期文件使用PowerShell我想从文件名读取日期,并保留最后5个日期文件使用PowerShell

下面

另一个位置是文件名样本,我有

Directory: E:\HOLDS\trim 
Name       
----       
17988000412767900-20170402-T 
17988000412770804-20170402-T 
17988000412773204-20170402-T 
17988000412792005-20170402-T 
17988000412794300-20170402-T 
17991325988242500-20170403-C 
17991325988242800-20170403-C 
17991325988243000-20170403-C 
17991325988245000-20170403-C 
17991325988245200-20170403-C 
17992327574130910-20170404-T 
17992327574131100-20170404-T 
17992327574145005-20170404-T 
17992327574145209-20170404-T 
17992327574169106-20170404-T 
17993057054385600-20170405-T 
17993326857390200-20170405-R 
17993327575638604-20170405-T 
17993327575676304-20170405-T 
17993327575835705-20170405-T 
17993327575844703-20170405-T 
17997018695202606-20170409-T 
17998001450000100-20170409-C 
17998001450001000-20170409-C 
17998057920002100-20170409-R 
17998119423714112-20170410-T 
17998119423728401-20170410-T 
17998282230003400-20170409-R 
17998297810002500-20170409-R 
17998327575543207-20170410-T 
17998327575543708-20170410-T 
17998327575546104-20170410-T 
17998327575547600-20170410-T 
17998327575591805-20170410-T 
+2

您好,欢迎堆栈溢出!请[编辑](http://stackoverflow.com/posts/43530400/edit)您的问题,向我们提供显示您尝试过的代码。一定要包括你收到的任何错误,或解释它如何不能达到你的预期。 – TheMadTechnician

回答

0

是没有任何理由可以不通过最后写入时间,而不是筛选?

$sourcedir = "c:\scripts\" 

$files = get-childitem $sourcedir | sort LastwriteTime 

# last files 
$files[-1].name 
# second from last file 
$files[-2].Name 
+0

感谢您的代码。我不能通过上次写入时间来选择,因为文件mignt生成与文件名 – Ahmed

0

从您的要求,如果你的文件的名字总是遵循相同的风格,我想你可以用这个流程做到这一点: 1.定义Direcroty /地图这是一个 2.获取的所有文件,然后循环文件&与分裂的文件名“ - ” &以秒为日期,然后添加到目录/图 3.将其不满足条件进行

$maps = New-Object 'system.collections.generic.dictionary[[string],[system.collections.generic.list[string]]]'; 
$list = New-Object 'system.collections.generic.list[string]'; 

$files = ("17988000412767900-20170402-T", 
"17988000412770804-20170402-T", 
"17988000412773204-20170402-T", 
"17988000412792005-20170402-T", 
"17988000412794300-20170402-T", 
"17991325988242500-20170403-C", 
"17991325988242800-20170403-C", 
"17991325988243000-20170403-C", 
"17991325988245000-20170403-C", 
"17991325988245200-20170403-C", 
"17992327574130910-20170404-T", 
"17992327574131100-20170404-T", 
"17992327574145005-20170404-T", 
"17992327574145209-20170404-T", 
"17992327574169106-20170404-T", 
"17993057054385600-20170405-T", 
"17993326857390200-20170405-R", 
"17993327575638604-20170405-T", 
"17993327575676304-20170405-T", 
"17993327575835705-20170405-T", 
"17993327575844703-20170405-T", 
"17997018695202606-20170409-T", 
"17998001450000100-20170409-C", 
"17998001450001000-20170409-C", 
"17998057920002100-20170409-R", 
"17998119423714112-20170410-T", 
"17998119423728401-20170410-T", 
"17998282230003400-20170409-R", 
"17998297810002500-20170409-R", 
"17998327575543207-20170410-T", 
"17998327575543708-20170410-T", 
"17998327575546104-20170410-T", 
"17998327575547600-20170410-T", 
"17998327575591805-20170410-T"); 

$files | %{ 
$date = $_.Split('-')[1]; 
if($maps.Keys.Contains($date)){ 
    $maps[$date].Add($_); 
} 
else{ 
    $maps.Add($date, $list); 
    $maps[$date].Add($_); 
} 
} 

输出将所有文件:

Key : 20170402 
Value : {17988000412767900-20170402-T, 17988000412770804-20170402-T, 17988000412773204-20170402-T, 17988000412792005-20170402-T...} 

Key : 20170403 
Value : {17988000412767900-20170402-T, 17988000412770804-20170402-T, 17988000412773204-20170402-T, 17988000412792005-20170402-T...} 

Key : 20170404 
Value : {17988000412767900-20170402-T, 17988000412770804-20170402-T, 17988000412773204-20170402-T, 17988000412792005-20170402-T...} 

Key : 20170405 
Value : {17988000412767900-20170402-T, 17988000412770804-20170402-T, 17988000412773204-20170402-T, 17988000412792005-20170402-T...} 

Key : 20170409 
Value : {17988000412767900-20170402-T, 17988000412770804-20170402-T, 17988000412773204-20170402-T, 17988000412792005-20170402-T...} 

Key : 20170410 
Value : {17988000412767900-20170402-T, 17988000412770804-20170402-T, 17988000412773204-20170402-T, 17988000412792005-20170402-T...} 

然后您可以订购$ map并循环它的所有文件的值&将它们移出。

+0

未来日期生成的代码感谢..将尝试此方法并分享反馈 – Ahmed

0

试试这个

$yourdirpath="C:\Temp\yourfolder" 
$yourmovedir="C:\Temp\movedir" 
$numrow=0 
$currentdate="" 

Get-ChildItem $yourdirpath | 
    select FullName, @{N="DateFile";E={$_.Name.substring(18, 8)}} | 
    sort DateFile -Descending | 
    foreach{ 

     if ($_.DateFile -ne $currentdate) 
     { 
      $numrow++ 
      $currentdate=$_.DateFile 
     } 

     [pscustomobject]@{FullName=$_.FullName;DateFile=$_.DateFile;numrow=$numrow} 

    } | where numrow -gt 2 | foreach{move-item $_.FullName -Destination $yourmovedir } 
+0

嗨感谢您的帮助。有用。如果我想从后向选择计数,该怎么办?它必须是-18.8? – Ahmed

+0

尝试.substring(0,17) – Esperento57

+0

当我给0它开始从左数。我想从右侧开始计数。 – Ahmed