我需要一个脚本,在PowerShell或批处理脚本中,它将执行以下操作。
重命名文件,将创建日期减去1天附加到文件名。
例如:
foo.xlsx(2011年7月27日创建)
foo-2011-07-26.xlsx - 注意,这是昨天的日期。
日期格式并不重要,只要它在那里。将有10个文件(所有文件都具有相同的创建日期),因此我可以复制并粘贴不同文件的相同重命名行(只需重命名文件名)或只是让脚本影响现有文件夹中的所有* .xlsx文件。
创建一个新文件夹,将这些文件命名为'fooFolder-2011-07-26'(昨天的日期)。
我对PowerShell的经验有限。这是我要学习的todo语言列表..
答案 0 :(得分:3)
你走了。使用别名和滚边等等可以缩短它,但由于你还不熟悉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天(或更多天)的文件,那么每天仍然会有一个文件夹,这些文件更加一致。
答案 1 :(得分:0)
好的,我已经成功了
function NameOfFunction([string]$folderpath)
{
foreach ($filepath in [System.IO.Directory]::GetFiles($folderpath))
{
$file = New-Object System.IO.FileInfo($filepath);
$date = $file.CreationTime.AddDays(-1).ToString('yyyy-MM-dd');
if (![System.IO.Directory]::Exists("C:\\test\foo-$date"))
{
[System.IO.Directory]::CreateDirectory("$folderpath\foo-$date");
}
$filename = $file.Name.Remove($file.Name.LastIndexOf('.'));
$fileext = $file.Name.SubString($file.Name.LastIndexOf('.'));
$targetpath = "$folderpath\foo-$date" + '\' + $filename + '-' + $date + $fileext;
[System.IO.File]::Move($filepath, $targetpath);
}
}
说明: 首先获取rootfolder中的所有文件。 Foreach文件夹我们创建一个FileInfo-Object并获得CreationTime -1天。 然后我们检查是否存在应该创建的目录,如果为false则创建它。 然后我们得到文件名和扩展名。 最后,我们将文件移动到新文件名下的新目录。
希望能帮到你