Необходимо переместить ряд цифровых файлов в папки в зависимости от имени файла - PullRequest
0 голосов
/ 05 мая 2020

У нас есть тысячи пакетов, которые каждый день сканируются во временную папку, и им присваиваются имена со своими номерами пакетов. Например: 301949.pdf, 405311.pdf, 481502.pdf, et c.

Наша структура папок состоит из папок на уровне тысячи и подпапок на уровне сотни следующим образом:

  • Y: \ PACKETS \ 300000 \ 300000-300099
  • Y: \ PACKETS \ 300000 \ 300100-300199
  • Y: \ PACKETS \ 300000 \ 300200-300299
  • Y: \ PACKETS \ 300000 \ 300300-300399
  • Y: \ PACKETS \ 300000 \ 300400-300499
  • Y: \ PACKETS \ 300000 \ 300500-300599
  • Y: \ PACKETS \ 300000 \ 300600-300699
  • Y: \ PACKETS \ 300000 \ 300700-300799
  • Y: \ PACKETS \ 300000 \ 300800-300899
  • Y: \ PACKETS \ 300000 \ 300900-300999
  • Y: \ PACKETS \ 400000 \ 400000-400099
  • Y: \ PACKETS \ 400000 \ 400100-400199
  • Y: \ PACKETS \ 400000 \ 400200-400299
  • Y: \ PACKETS \ 400000 \ 400300-400399
  • Y: \ PACKETS \ 400000 \ 400400-400499
  • Y: \ PACKETS \ 400000 \ 400500-400599
  • Y: \ PACKETS \ 400000 \ 400600-400699
  • Y: \ PACKETS \ 400000 \ 400700-400799
  • Y: \ PACKETS \ 400000 \ 400800-400899
  • Y: \ PACKETS \ 400000 \ 400900-400999
  • Y: \ PACKETS \ 481000 \ 481400-481499
  • Y: \ PACKETS \ 481000 \ 481500-481599
  • Y: \ PACKETS \ 481000 \ 481600-481699
  • Y: \ PACKETS \ 481000 \ 481700-481799
  • Y: \ PACKETS \ 481000 \ 481800-481899
  • Y: \ PACKETS \ 481000 \ 481900-481999
  • Y: \ PACKETS \ 481000 \ 481000-481099
  • Y: \ PACKETS \ 481000 \ 481100-481199
  • Y: \ PACKETS \ 481000 \ 481200-481299
  • Y: \ PACKETS \ 481000 \ 481300-481399

Нам нужно переместите каждый пакет в правильную папку на основе его числового имени файла:

Например:

  • 301949.pdf необходимо go в Y: \ PACKETS \ 301000 \ 301900-301999
  • 405311.pdf необходимо go в Y: \ PACKETS \ 405000 \ 405300-405399
  • 481502.pdf необходимо go в Y: \ PACKETS \ 481000 \ 481500-481599

Я даже не знаю, как начать это делать, но надеюсь, что кто-то здесь может помочь!

1 Ответ

0 голосов
/ 05 мая 2020

Мне стало немного скучно, так что вот вы go:

$SourceFolder = 'Y:\Temp'     # the temporary folder where the pdf files are
$Destination  = 'Y:\PACKETS'  # just the root folder

# you may want to add '-Recurse' if the temp folder contains subfolders
Get-ChildItem -Path $SourceFolder -Filter '*.pdf' -File |
    Where-Object { $_.BaseName -match '^\d{4,}$' } |    # filenames must be numeric and at least 1000 or more 
    ForEach-Object {
        $packet = [int]$_.BaseName                      # create a numeric value from the file's BaseName
        $level1 = [Math]::Floor($packet / 1000) * 1000  # get the 'thousand' value ( 301949 --> 301000 )
        $level2 = [Math]::Floor($packet / 100) * 100    # get the 'hundred' value  ( 301949 --> 301900 )

        # create the complete path to move the file to
        $target = Join-Path -Path $Destination -ChildPath ('{0}\{1}-{2}' -f $level1, $level2, ($level2 + 99))
        # test if this path exists and if not create it
        if (!(Test-Path -Path $target -PathType Container)) {
            $null = New-Item -Path $target -ItemType Directory
        }
        $_ | Move-Item -Destination $target
    }

Надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...