我一直在网上查看stackoverflow和其他论坛,以获得有关PowerShell变量和重命名功能的任何帮助。我没有运气。
我使用的文件名约定是:CompanyName 12.31.15 FS (“FS”描述文件的内容,在本例中为财务报表)。单个数字的月份前面有3个空格,因此“FS”总是在Windows资源管理器中以可视方式结束在同一列中。)
日期格式为m.dd.yy,但我想将其更改为yy.mm.dd.问题是我有超过30个文件夹,其中包含大量文件 - 有些不遵循此文件命名约定,但如果它们使用m.dd.yy格式,则文件名肯定遵循约定。
所以这就是我要找的东西:
一种只将文件名的日期部分从m.dd.yy切换到yy.mm.dd的方法
这样做时,还要删除2个前导空格(当前有3个空格),并且在CompanyName,date和content之间只有一个空格。
必须在“公司”文件夹
示例:
目前:
CocaCola 12.31.15 FS
CocaCola 6.30.15 FS
我想:
CocaCola 15.12.31 FS
CocaCola 15.06.31 FS
答案 0 :(得分:1)
使用Get-ChildItem
cmdlet检索文件。使用Rename-Item
重命名。
要切换日期,您可以解析它并将其格式化为所需的输出。但是,您也可以使用regex
:
$yourCompanyPath = 'C:\tmp'
$callback = {
param($match)
'{0} {1}.{2:D2}.{3} {4}' -f $match.Groups["CompanyName"].Value,
$match.Groups["Year"].Value,
[int]$match.Groups["Month"].Value,
$match.Groups["Day"].Value,
$match.Groups["FS"].Value
}
$rex = [regex]'(?<CompanyName>\S+)\s+(?<Month>\d+)\.(?<Day>\d+)\.(?<Year>\d+)\s+(?<FS>FS)'
Get-ChildItem $yourCompanyPath | Foreach {
$_ | Rename-Item -NewName ('{0}{1}' -f $rex.Replace($_.BaseName, $callback), $_.Extension)
}
来源示例:
CocaCola 6.30.15 FS.csv
CocaCola 12.31.15 FS.csv
<强>输出:强>
CocaCola 15.06.30 FS.csv
CocaCola 15.12.31 FS.csv