[英]Rename all files in folder using batch or powershell run from batch
[英]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" }
值為{ $_.Name -Replace "$_.Name$_.CreationTim" }
。 -replace
的語法是-replace 'PatternToReplace', 'NewValue'
。 如果僅定義了模式,如-replace 'PatternToReplace'
,則將刪除匹配的文本。
假設文件名當前為“ File1.txt”。 這將永遠與您的$_.Name$_.CreationTime
_。Name $_.Name$_.CreationTime
_。CreationTime -pattern不匹配。 “ 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
-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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.