Дата создания Powershell ForEach Возвращает дату для первого файла несколько раз - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь собрать цикл foreach, который даст мне дату в каждом из имен файлов, построенных с использованием подстрок в имени файла, используя следующий код:

$DailyFile = gci '\\web-servr-w01\Accounting' | ? {$_.Name -like 'GL_XTRAK_*'} | select -First 5 |select -ExpandProperty Name

$FileMon = $DailyFile.Substring(24,2)
$FileDay = $DailyFile.Substring(26,2)
$FileYr = $DailyFile.Substring(28,4)

$FileDate = get-date -Year $FileYr -Month $FileMon -Day $FileDay -Format "MM-dd-yyyy"

foreach($File in $DailyFile)
{
$FileDate
}

Но при запуске я получаю следующий вывод:

04-30-2019
04-30-2019
04-30-2019
04-30-2019
04-30-2019

Когда я ожидал:

04-30-2019
05-01-2019
05-02-2019
05-03-2019
05-04-2019

Я убедился, что код работает, когда я выбираю только один файл, изменив оператор GCI с помощью '-skip 1 -first 1' или -skip 2 -first 1 'и т. Д.

Я новичок в Powershell, поэтому, пожалуйста, будьте осторожны.

1 Ответ

2 голосов
/ 22 мая 2019

Вам нужно перебрать все файлы и получить параметры даты у каждого из них:

$DailyFileNames = gci '\\web-servr-w01\Accounting' | ? {$_.Name -like 'GL_XTRAK_*'} | select -First 5 |select -ExpandProperty Name

foreach($FileName in $DailyFileNames)
{
    $FileMon = $FileName.Substring(24,2)
    $FileDay = $FileName.Substring(26,2)
    $FileYr = $FileName.Substring(28,4)

    $FileDate = Get-Date -Year $FileYr -Month $FileMon -Day $FileDay -Format "MM-dd-yyyy"

    $FileDate
}

В этот момент вы можете заметить, что превращать строки в DateTime объект и обратно в строку снова не нужно:

$DailyFileNames = gci '\\web-servr-w01\Accounting' | ? {$_.Name -like 'GL_XTRAK_*'} | select -First 5 |select -ExpandProperty Name

foreach($FileName in $DailyFileNames)
{
    $FileMon = $FileName.Substring(24,2)
    $FileDay = $FileName.Substring(26,2)
    $FileYr = $FileName.Substring(28,4)

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