Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Powershell中批量重命名照片并向重复文件名添加字母_Powershell_Rename - Fatal编程技术网

在Powershell中批量重命名照片并向重复文件名添加字母

在Powershell中批量重命名照片并向重复文件名添加字母,powershell,rename,Powershell,Rename,我有一个关于powershell脚本的问题。我想重命名文件夹中的一组照片。我有一个旧名字和新名字的.csv文件。这是该文件的一部分: OldFile NewFile {5858AA5A-DB1B-475A-808E-0BFF0B885E5B}.jpeg 975NNNN-AGUIRRESUGARASSOCSTACK-Notes-20200828.jpeg {FA1E4CEE-0AD8-4B40-A5AD-4BB22C0EE4F0}.jpeg 975NNNN-AGUIRRESUGARASSOCSTA

我有一个关于powershell脚本的问题。我想重命名文件夹中的一组照片。我有一个旧名字和新名字的.csv文件。这是该文件的一部分:

OldFile NewFile {5858AA5A-DB1B-475A-808E-0BFF0B885E5B}.jpeg 975NNNN-AGUIRRESUGARASSOCSTACK-Notes-20200828.jpeg {FA1E4CEE-0AD8-4B40-A5AD-4BB22C0EE4F0}.jpeg 975NNNN-AGUIRRESUGARASSOCSTACK-Other-20200828.jpeg {FD20FA44-B3D2-4A6A-B73D-F3BADC2DDE71}.jpeg 975NNNN-AGUIRRESUGARASSOCSTACK-Vicinity-20200831.jpeg {E0DDA4CD-7783-417C-9BE0-705FFA08CD17}.jpeg 975NNNN-AGUIRRESUGARASSOCSTACK-Vicinity-20200831.jpeg {76DC6315-942D-444C-BA04-92FC9B9FF1A5}.jpeg 975NNNN-AGUIRRESUGARASSOCSTACK-Vicinity-20200831.jpeg {3C853453-0A0D-40B5-B3B7-B0F84F92D512}.jpeg 975NNNN-AGUIRRESUGARASSOCSTACK-Vicinity-20200831.jpeg 我能得到一些关于如何实现这个文件命名系统的指导吗


谢谢

我认为您需要使用方法.Insert()。这是一个小例子,它是如何工作的:

我在C:\Test中创建了一个名为975NNNN-aguirrm1-appearance-20200829.txt的txt,仅用于测试目的,在您的示例中,第一行代码用于识别重复项


当使用字母表中的字符重命名文件时,意味着您只有26个选项。如果这对您来说足够了,您可以执行以下操作:

$alphabet      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
$folderPath    = 'D:\Test'
$filesToRename = Import-CSV C:\Users\clair\OneDrive\Documents\JOA\batch_photos\Rename_Central_Aguirre.csv

foreach ($file In $filesToRename) {
    $oldFile = Join-Path -Path $folderPath -ChildPath $file.OldFile
    if (Test-Path $oldFile -PathType Leaf) {
        # split the new filename into workable parts
        $newName = $file.NewFile
        $extension = [System.IO.Path]::GetExtension($newName)
        $parts = [System.IO.Path]::GetFileNameWithoutExtension($newName) -split '-'
        $suffix = $parts[-1]
        $prefix = $parts[0..($parts.Count -2)] -join '-'
        $charToAppend = 0    # counter to go through the characters in the alphabet. 0..25
        while (Test-Path (Join-Path -Path $folderPath -ChildPath $newName) -PathType Leaf) {
            if ($charToAppend -gt 25) {
                # bail out if al characters have been used up
                throw "Cannot rename file '$($file.OldFile)', because all characters A-Z are already used"
            }
            $newName = '{0}{1}-{2}{3}' -f $prefix, $alphabet[$charToAppend++], $suffix, $extension
        } 
        Rename-Item -Path $oldFile -NewName $newName
    }
    else {
        Write-Warning "File '$($file.OldFile)' not found"
    }
}

之前:

D:\TEST
    {3C853453-0A0D-40B5-B3B7-B0F84F92D512}.jpeg
    {5858AA5A-DB1B-475A-808E-0BFF0B885E5B}.jpeg
    {76DC6315-942D-444C-BA04-92FC9B9FF1A5}.jpeg
    {E0DDA4CD-7783-417C-9BE0-705FFA08CD17}.jpeg
    {FA1E4CEE-0AD8-4B40-A5AD-4BB22C0EE4F0}.jpeg
    {FD20FA44-B3D2-4A6A-B73D-F3BADC2DDE71}.jpeg
之后:

D:\TEST
    975NNNN-AGUIRRESUGARASSOCSTACK-Notes-20200828.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-Other-20200828.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-Vicinity-20200831.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-VicinityA-20200831.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-VicinityB-20200831.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-VicinityC-20200831.jpeg

请不要发布代码/错误/样本数据的图像。为什么?瞧…>>>问问题时为什么不上传代码/错误的图像Meta Stack Overflow-@Lee_Dailey这是excel中样本数据的图片。我不知道如何在不变成图片的情况下发布它ECSV文件不是excel文件。[grin]它们是结构化的纯文本文件。//如果你真的有一个excel文件&希望人们能够在这个问题上使用它,那么它需要是文本。您可以在excel中选择并将其粘贴为纯文本,也可以将其导出为CSV文件并使用记事本复制信息。@Lee_Dailey谢谢!我已经更新了。(我对这种东西完全是新手)整洁!现在,请用代码标记将示例包装起来,以便于人们阅读。。。[咧嘴笑]这看起来应该可以用,但当我运行它时(在我的文件夹路径中添加子脚本后),什么也没发生。你知道发生了什么吗?@ClaireSchmidt好的,我在最初的答案中拼错了
$alphabet
,但由于我在整个代码中都拼错了,所以当我测试它时,它仍然运行良好。我刚刚又做了一次测试,并将结果放在我的答案中以显示结果。我在这里的假设是,您的CSV具有用逗号分隔的值。可能您的不在,并且这些值可能由另一个字符分隔(空格可能?)。在这种情况下,将
-分隔符'
添加到导入Csv命令中。请在记事本中打开它并检查文件中的分隔符。
D:\TEST
    {3C853453-0A0D-40B5-B3B7-B0F84F92D512}.jpeg
    {5858AA5A-DB1B-475A-808E-0BFF0B885E5B}.jpeg
    {76DC6315-942D-444C-BA04-92FC9B9FF1A5}.jpeg
    {E0DDA4CD-7783-417C-9BE0-705FFA08CD17}.jpeg
    {FA1E4CEE-0AD8-4B40-A5AD-4BB22C0EE4F0}.jpeg
    {FD20FA44-B3D2-4A6A-B73D-F3BADC2DDE71}.jpeg
D:\TEST
    975NNNN-AGUIRRESUGARASSOCSTACK-Notes-20200828.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-Other-20200828.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-Vicinity-20200831.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-VicinityA-20200831.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-VicinityB-20200831.jpeg
    975NNNN-AGUIRRESUGARASSOCSTACK-VicinityC-20200831.jpeg