簡體   English   中英

根據修改日期復制powershell中的文件

[英]Copy files in powershell according to the date modified

我正在嘗試根據修改日期將文件夾中的文件復制到另一個文件夾,但代碼不斷將源文件夾中的所有文件復制到目標文件夾。

New-Item -Path $psScriptRoot\ArchiveTest -ItemType Directory 

compress-Archive -Path $PSScriptRoot\*.txt -DestinationPath $PSScriptRoot\ArchiveTest  | Where-Object LastWriteTime -Like "*2010*" 

我試過更改 where-Object cmdlet 的語法。 當我將 Get-Item cmdlet 與完全相同的 Where-Object 一起使用時,我得到了正確的 output。

最終目標是根據年份將文件歸檔到文件夾中,例如:

文件夾中的項目:

模式 LastWriteTime 長度 名稱


-a---- 2010/02/15 15:23 39590 Test5.txt -a---- 2010/02/24 17:43 690581 Test5.txt -a---- 2012/04/12 11:46 105086 Test5.txt -a---- 2015/05/10 15:46 15952531 Test5.txt -a---- 2015/05/12 09:27 453365 Test5.txt

我想在文件夾中結束的內容:

模式 LastWriteTime 長度 名稱


d----- 2023/01/10 11:35 2010 -----
d----- 2023/01/10 11:35 2012 ------ (Zip 文件夾) d----- 2023/01/10 11:35 2015 -----/

這是如何做到的:

Get-ChildItem -Path $PSScriptRoot -Filter "*.txt" | Where-Object { $_.LastWriteTime.Year -eq "2022" } | Compress-Archive -DestinationPath "$PSScriptRoot\archive_2022.zip"

以下是如何在幾年內循環執行此操作:

$startYear = 2001;
$endYear = 2020;

for ($year = $startYear; $year -le $endYear; $year++) {
    Get-ChildItem -Path $PSScriptRoot -Filter "*.txt" | Where-Object { $_.LastWriteTime.Year -eq $year } | Compress-Archive -DestinationPath "$PSScriptRoot\archive_$year.zip"
}
What I ended up with is: 

    $StartYear = 2001;
$EndYear = 2021;
$Thickness = @(Get-ChildItem $PSScriptRoot |
             Where-Object {$_.PSIsContainer} |
             ForEach-Object {$_.Name})

Write-Output $Thickness

for($Counter=0;$Counter -lt $Thickness.Count;$Counter++) {
    if(!(Test-Path -Path "$PSScriptRoot\$($Thickness[$Counter])\Previous Years")) {
           new-Item -Path "$PSScriptRoot\$($Thickness[$Counter])\Previous Years" -ItemType Directory
    }
    for ($year = $startYear; $year -le $endYear; $year++){
        Get-ChildItem -Path $PSScriptRoot\$($Thickness[$Counter]) -Filter "*.WS" | Where-Object { $_.LastWriteTime.Year -eq $year } | Compress-Archive -DestinationPath "$PSScriptRoot\$($Thickness[$Counter])\Previous Years\$year.zip"
        Get-ChildItem -Path $PSScriptRoot\$($Thickness[$Counter]) -Filter "*.WS" | Where-Object { $_.LastWriteTime.Year -eq $year } | Remove-Item
    }   
}


Any comment on how i could improve it? 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM