我正在尝试建立一个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新手,所以请保持温柔。
答案 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"
}