gpt4 book ai didi

scripting - 重命名文件列表并在Powershell中创建文件夹

转载 作者:行者123 更新时间:2023-12-03 01:23:05 29 4
gpt4 key购买 nike

我需要在PowerShell或批处理脚本中执行以下操作的脚本。

  • 重命名文件以将创建日期减去1天添加到文件名中。

    例如:

    foo.xlsx(创建7/27/2011)

    foo-2011-07-26.xlsx-请注意,这是昨天的日期。

    只要日期格式存在,它就不太重要。将有10个文件(所有文件都具有相同的创建日期),因此我可以为不同的文件复制并粘贴相同的重命名行(只需重命名文件名),或者只是让脚本影响现有文件夹中的所有* .xlsx文件。
  • 在这些文件所在的位置创建一个新文件夹,并将其命名为“fooFolder-2011-07-26”(昨天的日期)。
  • 将那些重命名的文件移到该文件夹​​。

  • 我对PowerShell的经验有限。它在我要学习的语言的待办事项 list 上。

    最佳答案

    干得好。使用别名和管道等可以将其缩短很多,但是由于您仍然不熟悉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 session 中(将其放置在个人资料中)。然后,您可以像下面这样调用函数:
    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天(或更多天)的文件,则每天仍然会有一个文件夹存放这些文件,这更加一致。

    关于scripting - 重命名文件列表并在Powershell中创建文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6849902/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com