将日期添加到多个文件夹中的多个文件的名称中

将日期添加到多个文件夹中的多个文件的名称中

我有一个包含 400 多个子文件夹的目录。每个子文件夹中每天都会出现一个新文件。每个新文件的名称都与昨天出现在同一个文件夹中的文件相同。每个文件夹包含的文件名称与其他文件夹中的文件不同,但同一文件夹中的新文件始终具有相同的名称。我不希望每天都覆盖文件。相反,我希望 Powershell 在文件名后面和扩展名之前添加今天的日期。我知道如何对单个子文件夹执行此操作,但我不想创建 400 多个脚本(每个子文件夹一个)。

这是可以完美完成每个文件夹任务的脚本

$fileToRename = "E:\Backup\ABLBackup\folder1\Project1.txt"
if (Test-Path $fileToRename)

    {
    $fileName = [system.io.path]::GetFileNameWithoutExtension($fileToRename)
    $dateSuffix = get-date -Format 'yyyy_MM_dd'
    $fileExtension = [system.io.path]::GetExtension($fileToRename)
    $newFileName = '{0}_{1}{2}' -f $fileName, $dateSuffix, $fileExtension
    Rename-Item -Path $fileToRename -NewName $newFileName
}

我想知道如何修改上面的脚本,以便所有 400 多个子文件夹都可以包含在一个脚本中。我知道我可以重复相同的命令 400 多次并将其保存为一个脚本,但这不可行,因为用户会在没有通知我的情况下添加新文件夹。肯定有某种自动获取子文件夹中出现的所有新文件的方法。

文件夹结构如下:

E:\Backup\ABLBackup\folder1\Project1.txt

E:\Backup\ABLBackup\folder2\Project2.txt

E:\Backup\ABLBackup\folder3\Project3.txt

E:\Backup\ABLBackup\folder4\Project4.txt

任何帮助将不胜感激!

答案1

我喜欢保持简单,只要它不影响性能或功能。您可以添加侦听器来检测新文件何时添加并自动重命名,但这是一个复杂的问题,我现在不太想学习,更不用说解释了,哈哈。

因此,我会采用简单的循环-if-then 方法。

首先,您需要循环遍历这些文件夹:

Get-ChildItem "E:\Backup\ABLBackup" |
  Where PSIsContainer |
  Foreach-Object {}

接下来,据我了解,您需要检查是否有新文件(基本上是不包含日期的文件)

if (Get-ChildItem $_.FullName | Where Name -notlike "*_????_??_??.*") {}

将其与您的脚本放在一起,整理至适合的程度:

Get-ChildItem "E:\Backup\ABLBackup" |
  Where PSIsContainer |
  Foreach-Object {
    $newitem = Get-ChildItem $_.FullName | Where Name -notlike "*_????_??_??.*"
    if ($newitem)
    {
        $dateSuffix = get-date -Format 'yyyy_MM_dd'
        $newFileName = '{0}_{1}{2}' -f $newitem.BaseName, $dateSuffix, $newitem.Extension
        Rename-Item $newitem -NewName $newFileName
    }
}

设置一个计划任务每​​半小时或类似时间运行一次,你就会笑。

相关内容