2017-04-20 88 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