Создайте ежедневную папку, переместите в нее файлы, затем переместите эту папку в папку Achive

Я ИТ-администратор, но не знаю PowerShell. Я создал скрипт, погуглив в Интернете и поигравшись с ним, но мне нужно немного больше функциональности.

Вот немного справочной информации: Каждый день мы сканируем кучу документов в папку «Сканирования». Внутри папки «Сканы» также есть папка «Архив».

Вот чего я пытаюсь добиться с помощью скрипта:

Я бы хотел, чтобы сценарий запускался каждую ночь. Если в папке «Сканирования» есть какие-либо файлы (не папки),

  • создайте папку с текущей датой в качестве имени папки, например (30.08.2024)
  • переместите эти файлы на основе даты создания в эту папку на текущую дату
  • переместите эту папку на текущую дату и файлы внутри нее в папку «Архив».

Если в конкретный день файлов нет, то скрипт ничего не делает.

Я надеюсь, что это имеет смысл.

$datecurrent = get-date -Format MM-dd-yyyy
New-Item -ItemType directory -Path "C:\Users\Admin\Desktop\Scans\$datecurrent"

$DestinationFolder = "C:\Users\Admin\Desktop\Scans$datecurrent"
$archiveFolder = "C:\Users\Admin\Desktop\Scans\Archive"

$EarliestModifiedTime = get-date (get-date -format d)
$Files = Get-ChildItem "C:\Users\Admin\Desktop\Scans*.*"

foreach ($File in $Files) {
    if ($File.LastWriteTime -gt $EarliestModifiedTime) {
        Move-Item $File -Destination $DestinationFolder
        Write-Host "Copying $File"
    } else { 
        Write-Host "Not copying $File"
    }
}

Move-Item $DestinationFolder -Destination $ArchiveFolder

🤔 А знаете ли вы, что...
PowerShell может использоваться для создания отчетов и аналитических данных из различных источников.


57
1

Ответ:

Решено

Это должно быть все, что вам нужно:

$Root = 'C:\Users\Admin\Desktop\Scans'
$ArchiveRoot = 'C:\Users\Admin\Desktop\Scans\Archive'

$CurrentFileList = Get-ChildItem -Path $Root -File
if ($CurrentFileList) {
    $DestinationFolder = Join-Path -Path $ArchiveRoot -ChildPath $(Get-Date -Format 'yyyy-MM-dd')
    New-Item -Path $DestinationFolder -ItemType Directory | Out-Null
    Move-Item -Path $CurrentFileList.FullName -Destination $DestinationFolder -Force
}