Вот, пожалуйста. Его можно было бы значительно сократить, используя псевдонимы, конвейеры и еще много чего, но, поскольку вы все еще не знакомы с 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))}
}
Редактировать : Изменены обе функции для создания устаревшей папки для файлов, соответствующих этой дате. Я подумал о создании временного каталога и получении единственной даты из файлов, перемещенных в него, и, наконец, переименовании каталога после цикла. Однако если пропустить один день и обработать файлы в течение 2 (или более) дней, все равно будет папка для каждого дня, что более согласованно.