如何通过在原始文件名前加上序列号来重命名文件?

How can I rename files by prepending a sequence number to the original file names?

伙计们,有人知道我该怎么做吗?我试图通过在文件名的开头添加 1、2、3 等来按数字顺序列出一些文件,同时还保留文件的原始名称。

这是我试过的代码

$nr = 1

Dir -path C:\x\y\deneme | %{Rename-Item $_ -NewName (‘{0} $_.Name.txt’ -f $nr++ )}

dir | select name

此代码只是将文件排序为 1、2、3...,而不保留原始名称。


$n = 1
Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace $_.Name ,'{0} $_.Name' -f $n++}

这个和我想的不一样。

所以,是的,我同意 @Abraham,我看不到既可以 重命名 文件又可以 保留 没有复制的原始文件:)

这应该可以解决问题:

$i = 0; Get-ChildItem x:\path\to\files | ForEach-Object {
    $i++
    $destPath = Join-Path $_.DirectoryName -ChildPath "$i $($_.Name)"
    Copy-Item -Path $_.FullName -Destination $destPath
}

示例:

Mode                 LastWriteTime         Length Name                                                                                                                    
----                 -------------         ------ ----                                                                                                                    
-a----         6/24/2021   7:08 PM              2 1 testfile0.txt
-a----         6/24/2021   7:08 PM              2 2 testfile1.txt
-a----         6/24/2021   7:08 PM              2 3 testfile2.txt
-a----         6/24/2021   7:08 PM              2 4 testfile3.txt
-a----         6/24/2021   7:08 PM              2 5 testfile4.txt
-a----         6/24/2021   7:08 PM              2 testfile0.txt  
-a----         6/24/2021   7:08 PM              2 testfile1.txt  
-a----         6/24/2021   7:08 PM              2 testfile2.txt  
-a----         6/24/2021   7:08 PM              2 testfile3.txt  
-a----         6/24/2021   7:08 PM              2 testfile4.txt  

尝试以下操作,重命名当前目录中的所有 .txt 文件。通过在它们前面加上一个序列号:

$n = 1
Get-ChildItem *.txt | 
  Rename-Item -WhatIf -NewName { '{0} {1}' -f ([ref] $n).Value++, $_.Name }

注意:上面命令中的-WhatIf common parameter预览操作。一旦您确定该操作将执行您想要的操作,请删除 -WhatIf

([ref] $n).Value++ 技巧弥补了 run in a child scope of the caller, where the caller's variables are seen, but applying ++ (or assigning a value) creates a transient, local copy of the variable (see 概述 PowerShell 作用域规则的事实。
[ref] $n 实际上 returns 对调用者变量对象的引用,然后可以更新其 .Value 属性。


至于你试过的

  • '{0} $_.Name.txt',作为 引号字符串,由 PowerShell 逐字解释;您不能在此类字符串中嵌入变量引用;为此,您需要 double-quoting ("...",并且您还需要 $(...) 才能嵌入 expression 例如 $_.Name) - 请参阅 this answer 的底部部分以了解 PowerShell 字符串文字的概述。