如何通过在原始文件名前加上序列号来重命名文件?
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 字符串文字的概述。
伙计们,有人知道我该怎么做吗?我试图通过在文件名的开头添加 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++
技巧弥补了 ++
(or assigning a value) creates a transient, local copy of the variable (see
[ref] $n
实际上 returns 对调用者变量对象的引用,然后可以更新其 .Value
属性。
至于你试过的:
'{0} $_.Name.txt'
,作为 单 引号字符串,由 PowerShell 逐字解释;您不能在此类字符串中嵌入变量引用;为此,您需要 double-quoting ("..."
,并且您还需要$(...)
才能嵌入 expression 例如$_.Name
) - 请参阅 this answer 的底部部分以了解 PowerShell 字符串文字的概述。