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