使用文件名子字符串的文件夹中的项目列表

时间:2013-12-18 07:16:38

标签: powershell

我有一个包含.xls文件的目录,其名称如下:

Recon_ [帐号] _ [YYYYMMDD] .xls

e.g:

Recon_9020111006076954416_20131216.xls

帐号可以是16到20之间的任意数字。

我需要获取此文件夹中的项目列表 - 但只有帐号。

如果我能得到一个帐号列表然后在它们旁边创建文件的日期(可以是文件名中的日期戳或文件的最后修改日期),那将是什么奇妙的,在YYYY / MM / DD格式,按日期排序。

像这样:

9020111006076954416 2013/12/16
10201129080000235952 2013/12/17

然后,我需要在文本文件中使用此帐户列表,甚至更好的是excel文件。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

相当简单,实际上:

  1. 首先获取原始数据

    Get-ChildItem *.xls |
    
  2. 然后从中提取您需要的属性:

    ForEach-Object {
        if ($_.Basename -match '^Recon_(?<account>\d+)_(?<date>\d+)$') {
            $_ | Add-Member NoteProperty AccountNumber $Matches.account
        }
    } |
    
  3. 选择您感兴趣的属性(我们仍在处理原始FileInfo对象,我们只是添加了帐号):

    Select-Object AccountNumber,LastWriteTime
    

    你也可以使标题更好:

    Select-Object @{l='Account Number'; e={$_.AccountNumber}}, @{l='Date'; e={$_.LastWriteTime}}
    
  4. 此时你可以很好地在屏幕上显示一些东西。然后,您可以通过将数据汇总到另一个ForEach-Object

    来继续格式化数据
    ForEach-Object {
        '{0}`t{1:yyyy-MM-dd}' -f $_.AccountNumber, $_.LastWriteTime
    }
    

    或通过管道传输到ConvertTo-Csv

    将其转换为CSV(Excel可以打开)
    ConvertTo-Csv foo.csv
    

    回顾一下:

    $data = Get-ChildItem *.xls |
              ForEach-Object {
                  if ($_.Basename -match '^Recon_(?<account>\d+)_(?<date>\d+)$') {
                      $_ | Add-Member NoteProperty AccountNumber $Matches.account
                  }
              } |
              Select-Object AccountNumber,LastWriteTime
    
    $data | ForEach-Object {
        "{0}`t{1:yyyy-MM-dd}" -f $_.AccountNumber, $_.LastWriteTime
    } | Out-File foo.txt
    
    $data | ConvertTo-Csv foo.csv
    

答案 1 :(得分:1)

尝试一下:

Get-ChildItem -Filter *.xls | Where-Object {$_.BaseName -match '^Recon_\d{16,20}_\d+$'} | ForEach-Object{

    $id,$date = $_.BaseName.Split('_')[1..2]

    New-Object PSObject -Property @{
       AccountNumber = $id
       DateCreated = $date.Insert(4,'/').Insert(7,'/')
    }

} | Export-Csv itemList.csv -NoTypeInformation

答案 2 :(得分:0)

获取此目录的所有文件。在循环中获取文件名并将其拆分为&#39; _&#39;。数组的第二项是帐号,第三项是日期。