使用 PowerShell 重命名文件夹中的所有文件并将名称替换为 creationTime
Rename All files in a Folder and replace the name with the creationTime Using PowerShell
我想编写一个函数,将每个文件的名称替换为当前名称,后跟 creatiomTime。
这是我的职能:
Function RenameFolderFiles{
Param([String]$path)
Get-Childitem $path -Recurse | Rename-Item -NewName { $_.Name -Replace "$_.Name$_.CreationTim" }
}
但是没用。有任何想法吗?谢谢
我注意到多个问题。最重要的是您的新名称值为 { $_.Name -Replace "$_.Name$_.CreationTim" }
。 -replace
的语法是 -replace 'PatternToReplace', 'NewValue'
。如果只定义了模式,如-replace 'PatternToReplace'
,那么匹配的文本将被删除。
假设文件名当前为 "File1.txt"。这永远不会匹配您的 $_.Name$_.CreationTime
-pattern,例如。 "File1.txt23.01.2015 23.15.59",因此它永远不会 replace/modify 名称,结果将是您的文件被重命名为它们当前的名称。
还有:
CreationTim
缺少一个 e
- 在
"$_.Name$_.CreationTim"
中,您正在访问属性。要在字符串中包含 属性 的值,您需要使用子表达式 $()
,如 "$($_.Name)$($_.CreationTime)"
,或格式运算符,如 "{0}{1}" -f $_.Name, $_.CreationTime
- 您使用
-Recurse
,这意味着您需要子文件夹。文件夹也将被重命名,当文件的路径不再存在(父文件夹已重命名)时,这可能会在以后导致错误。
-
Name
-属性 包含扩展名,因此如果您正确使用了 -replace
命令,那么 "File1.txt" 将变为 "File1.txt23.01.2015 23.15.59"。没有扩展名的文件。要分别获取文件名和扩展名,请使用 BaseName
- 和 Extension
-properties
我认为这就是您要查找的内容:
Function RenameFolderFiles{
Param([String]$path)
Get-Childitem $path -Recurse |
#Get files only
Where-Object { !$_.PSIsContainer } |
Rename-Item -NewName { "{0}{1}{2}" -f $_.BaseName, $_.CreationTime.ToString('ddMMyyyy-hhmmss'), $_.Extension }
}
演示:
#Files before
Get-ChildItem -Recurse "C:\Users\Frode\Desktop" | Where-Object { !$_.PSIsContainer } | Select-Object -ExpandProperty FullName
C:\Users\Frode\Desktop\New Text Document - Copy (2).txt
C:\Users\Frode\Desktop\New Text Document - Copy.txt
C:\Users\Frode\Desktop\New Text Document.txt
C:\Users\Frode\Desktop\test\asd - Copy.txt
C:\Users\Frode\Desktop\test\asd.txt
#Create and run function
Function RenameFolderFiles{
Param([String]$path)
Get-Childitem $path -Recurse |
#Get files only
Where-Object { !$_.PSIsContainer } |
Rename-Item -NewName { "{0}{1}{2}" -f $_.BaseName, $_.CreationTime.ToString('ddMMyyyy-hhmmss'), $_.Extension }
}
RenameFolderFiles -path "C:\Users\Frode\Desktop"
#Files after
Get-ChildItem -Recurse "C:\Users\Frode\Desktop" | Where-Object { !$_.PSIsContainer } | Select-Object -ExpandProperty FullName
C:\Users\Frode\Desktop\New Text Document - Copy (2)01022015-122544.txt
C:\Users\Frode\Desktop\New Text Document - Copy01022015-122543.txt
C:\Users\Frode\Desktop\New Text Document01022015-121535.txt
C:\Users\Frode\Desktop\test\asd - Copy01022015-122532.txt
C:\Users\Frode\Desktop\test\asd01022015-122531.txt
我想编写一个函数,将每个文件的名称替换为当前名称,后跟 creatiomTime。 这是我的职能:
Function RenameFolderFiles{
Param([String]$path)
Get-Childitem $path -Recurse | Rename-Item -NewName { $_.Name -Replace "$_.Name$_.CreationTim" }
}
但是没用。有任何想法吗?谢谢
我注意到多个问题。最重要的是您的新名称值为 { $_.Name -Replace "$_.Name$_.CreationTim" }
。 -replace
的语法是 -replace 'PatternToReplace', 'NewValue'
。如果只定义了模式,如-replace 'PatternToReplace'
,那么匹配的文本将被删除。
假设文件名当前为 "File1.txt"。这永远不会匹配您的 $_.Name$_.CreationTime
-pattern,例如。 "File1.txt23.01.2015 23.15.59",因此它永远不会 replace/modify 名称,结果将是您的文件被重命名为它们当前的名称。
还有:
CreationTim
缺少一个e
- 在
"$_.Name$_.CreationTim"
中,您正在访问属性。要在字符串中包含 属性 的值,您需要使用子表达式$()
,如"$($_.Name)$($_.CreationTime)"
,或格式运算符,如"{0}{1}" -f $_.Name, $_.CreationTime
- 您使用
-Recurse
,这意味着您需要子文件夹。文件夹也将被重命名,当文件的路径不再存在(父文件夹已重命名)时,这可能会在以后导致错误。 -
Name
-属性 包含扩展名,因此如果您正确使用了-replace
命令,那么 "File1.txt" 将变为 "File1.txt23.01.2015 23.15.59"。没有扩展名的文件。要分别获取文件名和扩展名,请使用BaseName
- 和Extension
-properties
我认为这就是您要查找的内容:
Function RenameFolderFiles{
Param([String]$path)
Get-Childitem $path -Recurse |
#Get files only
Where-Object { !$_.PSIsContainer } |
Rename-Item -NewName { "{0}{1}{2}" -f $_.BaseName, $_.CreationTime.ToString('ddMMyyyy-hhmmss'), $_.Extension }
}
演示:
#Files before
Get-ChildItem -Recurse "C:\Users\Frode\Desktop" | Where-Object { !$_.PSIsContainer } | Select-Object -ExpandProperty FullName
C:\Users\Frode\Desktop\New Text Document - Copy (2).txt
C:\Users\Frode\Desktop\New Text Document - Copy.txt
C:\Users\Frode\Desktop\New Text Document.txt
C:\Users\Frode\Desktop\test\asd - Copy.txt
C:\Users\Frode\Desktop\test\asd.txt
#Create and run function
Function RenameFolderFiles{
Param([String]$path)
Get-Childitem $path -Recurse |
#Get files only
Where-Object { !$_.PSIsContainer } |
Rename-Item -NewName { "{0}{1}{2}" -f $_.BaseName, $_.CreationTime.ToString('ddMMyyyy-hhmmss'), $_.Extension }
}
RenameFolderFiles -path "C:\Users\Frode\Desktop"
#Files after
Get-ChildItem -Recurse "C:\Users\Frode\Desktop" | Where-Object { !$_.PSIsContainer } | Select-Object -ExpandProperty FullName
C:\Users\Frode\Desktop\New Text Document - Copy (2)01022015-122544.txt
C:\Users\Frode\Desktop\New Text Document - Copy01022015-122543.txt
C:\Users\Frode\Desktop\New Text Document01022015-121535.txt
C:\Users\Frode\Desktop\test\asd - Copy01022015-122532.txt
C:\Users\Frode\Desktop\test\asd01022015-122531.txt