我想编写一个函数,用当前名称后跟creatiomTime替换每个文件的名称。 这是我的功能:
Function RenameFolderFiles{
Param([String]$path)
Get-Childitem $path -Recurse | Rename-Item -NewName { $_.Name -Replace "$_.Name$_.CreationTim" }
}
但它不起作用。有任何想法吗?谢谢
答案 0 :(得分:0)
我发现了多个问题。最重要的是您的newname-value为{ $_.Name -Replace "$_.Name$_.CreationTim" }
。 -replace
的语法是-replace 'PatternToReplace', 'NewValue'
。如果仅定义了模式,例如-replace 'PatternToReplace'
,则匹配的文本将被删除。
让我们说文件名目前是" File1.txt"。这永远不会与您的$_.Name$_.CreationTime
模式匹配,例如。 " File1.txt23.01.2015 23.15.59",所以它永远不会替换/修改名称,结果就是你的文件被重命名为他们当前的名字。
此外:
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
- 属性我认为您正在寻找的是:
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