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

Powershell 使用文件名子字符串的文件夹中的项目列表,powershell,Powershell,我有一个包含.xls文件的目录,其名称如下: 重新确认[账号][yyyyymmdd].xls e、 g: 侦察9020111006076954416\u 20131216.xls 帐号可以是16到20之间的任意字符数 我需要获取此文件夹中的项目列表,但仅获取帐号 如果我能得到一个账号列表,然后在旁边是文件的创建日期(可以是文件名中的日期戳或文件的最后修改日期),格式为YYYY/MM/DD,按日期排序,那就太棒了 像这样: 9020111006076954416 2013/12/16 102011

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

重新确认[账号][yyyyymmdd].xls

e、 g:

侦察9020111006076954416\u 20131216.xls

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

我需要获取此文件夹中的项目列表,但仅获取帐号

如果我能得到一个账号列表,然后在旁边是文件的创建日期(可以是文件名中的日期戳或文件的最后修改日期),格式为YYYY/MM/DD,按日期排序,那就太棒了

像这样:

9020111006076954416 2013/12/16
1020112908000235952 2013/12/17


然后我需要一个文本文件中的帐户列表,或者更好的是,一个excel文件。有什么想法吗?

获取此目录的所有文件。在循环中,获取文件名并将其按“\u1”拆分。数组的第二项是帐号,第三项是日期。

相当简单,实际上:

  • 首先获取原始数据

    Get-ChildItem *.xls |
    
  • 然后从中提取所需的属性:

    ForEach-Object {
        if ($_.Basename -match '^Recon_(?<account>\d+)_(?<date>\d+)$') {
            $_ | Add-Member NoteProperty AccountNumber $Matches.account
        }
    } |
    
    您还可以使标题更美观:

    Select-Object @{l='Account Number'; e={$_.AccountNumber}}, @{l='Date'; e={$_.LastWriteTime}}
    
  • 此时,您可以在屏幕上很好地显示一些内容。然后,您可以通过管道将数据传输到另一个
    ForEach对象中,继续格式化数据:

    ForEach-Object {
        '{0}`t{1:yyyy-MM-dd}' -f $_.AccountNumber, $_.LastWriteTime
    }
    
    或者通过管道将其转换为CSV(Excel可以打开),方法是将其转换为
    ConvertTo CSV

    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
    
    $data=Get ChildItem*.xls|
    ForEach对象{
    如果($\.Basename-匹配“^Recon”(\d+)\u(?\ d+)$”){
    $124;添加成员NoteProperty AccountNumber$Matches.account
    }
    } |
    选择对象AccountNumber,LastWriteTime
    $data | ForEach对象{
    “{0}`t{1:yyyy-MM-dd}”-f$\u.AccountNumber,$\u.LastWriteTime
    }|输出文件foo.txt
    $data |转换为Csv foo.Csv
    
    尝试一下:

    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
    

    txt文件不返回帐号,并且有如下记录:`t2013-12-03Hi,这几乎可以工作,只是帐号需要采用文本格式,因为excel会将其转换为类似1020110607000010000的格式。此外,我如何按日期排序?所有值都是文本。是否希望日期是datetime对象(而不是字符串)?
    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