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

Powershell构造日期ForEach多次返回第一个文件的日期,powershell,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.Subs

我正在尝试组合一个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新手,因此请保持温和。

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

$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"
}
您需要循环所有文件,并从每个文件中获取日期参数:

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

工作完美。我曾尝试将变量放入{}中,但我没有意识到我必须将变量$DailyFile更改为Foreach中定义的任何变量(又名$FileName)。工作非常完美。我曾尝试将变量放入{}中,但我没有意识到我必须将变量$DailyFile更改为Foreach中定义的任何内容(也称$FileName)。