Powershell构造日期ForEach多次返回第一个文件的日期

时间:2019-05-22 15:55:32

标签: powershell

我正在尝试建立一个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

我已经验证了当我仅通过使用'-skip 1 -first 1'或-skip 2 -first 1'等修改GCI语句来选择单个文件时,代码可以工作的情况。

我是Powershell新手,所以请保持温柔。

1 个答案:

答案 0 :(得分:2)

您需要遍历所有个文件,并从每个文件中获取日期参数:

$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"
}