在这里,你去。它可以缩短了使用别名和管道和诸如此类的东西很多,但因为你不熟悉使用PowerShell,我仍然决定在多个程序的风格来写你的阅读:
function MoveFilesAndRenameWithDate([string]$folderPrefix, [string]$filePattern) {
$files = Get-ChildItem .\* -include $filePattern
ForEach ($file in $files) {
$yesterDate = $file.CreationTime.AddDays(-1).ToString('yyyy-MM-dd')
$newSubFolderName = '{0}-{1}' -f $folderPrefix,$yesterDate
if (!(Test-Path $newSubFolderName)) {
mkdir $newSubFolderName
}
$newFileName = '{0}-{1}{2}' -f $file.BaseName,$yesterDate,$file.Extension
Move-Item $file (Join-Path $newSubFolderName $newFileName)
}
}
你会粘贴到上述您的Powershell会话(将其放置在您的配置文件中)。然后你调用这样的函数:
MoveFilesAndRenameWithDate 'fooFolder' '*.xslx'
我倾向于使用更多的别名和管道比上述功能。我写的第一个版本是这样的,然后我分开的这部分,使其更容易理解到PowerShell的新人:
function MoveFilesAndRenameWithDate([string]$folderPrefix, [string]$filePattern) {
gci .\* -include $filePattern |
% { $date = $_.CreationTime.AddDays(-1).ToString('yyyy-MM-dd')
mkdir "$folderPrefix-$date" 2>$null
mv $_ (join-path $newSubFolderName ('{0}-{1}{2}' -f $_.BaseName,$date,$_.Extension))}
}
编辑:修改两项功能,为配合该日期,该文件创建日期的文件夹。我考虑制作一个临时目录,并从移动到它的文件中获取单个日期,最后在循环之后重命名该目录。但是,如果一天应该错过并且两天(或更多天)的文件一起处理,那么每天仍然会有一个文件夹,这些文件更加一致。
该日期是静态的还是始终是脚本运行的日期(减1)? – EBGreen