Windows - Создать папку и подпапку на основе даты имени файла - PullRequest
0 голосов
/ 27 марта 2020

У меня есть папка с несколькими файлами PDF, в которой последние 8 символов являются датой документа в формате ГГГГММДД, примеры:

Файл_ГГГГММДД Test_Ref_YYYYMMDD file.nr_YYYYMMDD

I ищу способ создания структуры папок на основе последних 8 символов: OutputFolder \ Subfolder YYYY \ Subfolder MM \ Имя файла остается прежним.

Спасибо.

1 Ответ

0 голосов
/ 27 марта 2020

Для этого вам нужно перебрать исходную папку, где находятся файлы pdf, и, используя их BaseName (= имя файла без расширения), получить часть года и месяца.

Имея их, создать Структура папок в PowerShell очень сложна:

$sourceFolder = 'D:\OriginalPath' # the path where your pdf files are
$destination  = 'D:\PdfFiles'     # the folder where the new folder structure should be created

# get the pdf files that have a basename ending with 8 digits
Get-ChildItem -Path $sourceFolder -Filter '*.pdf' -File | 
    Where-Object { $_.BaseName -match '\d{8}$' } | 
    ForEach-Object {
        # split the year and month part of the file's basename
        $match = $_.BaseName -match '(\d{4})(\d{2})\d{2}$'
        $year, $month = $matches[1..2]
        # construct the folder path
        $targetFolder = Join-Path -Path $destination -ChildPath "$year\$month"
        # if the target folder does not exist, create it
        if (!(Test-Path -Path $targetFolder -PathType Container)) {
            $null = New-Item -Path $targetFolder -ItemType Directory
        }
        # you probably now want to copy or move the file in that target folder
        $_ | Copy-Item -Destination $targetFolder
    }

Пример исходной папки:

D:\ORIGINALPATH
    File_20200201.pdf
    File_20200327.pdf
    Test_Ref_20191127.pdf

После запуска кода:

D:\PDFFILES
+---2019
|   \---11
|           Test_Ref_20191127.pdf
|
\---2020
    +---02
    |       File_20200201.pdf
    |
    \---03
            File_20200327.pdf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...