重命名文件夹中的所有文件,并使用PowerShell将其名称替换为creationTime
我想写一个函数,用当前名称和creatiomTime替换每个文件的名称。 这是我的职责:重命名文件夹中的所有文件,并使用PowerShell将其名称替换为creationTime,powershell,rename,Powershell,Rename,我想写一个函数,用当前名称和creatiomTime替换每个文件的名称。 这是我的职责: Function RenameFolderFiles{ Param([String]$path) Get-Childitem $path -Recurse | Rename-Item -NewName { $_.Name -Replace "$_.Name$_.CreationTim" } } 但它不起作用。有什么想法吗?谢谢我注意到多个问题。最重要的是,您的newname值是{$\u0.Name-Rep
Function RenameFolderFiles{
Param([String]$path)
Get-Childitem $path -Recurse | Rename-Item -NewName { $_.Name -Replace "$_.Name$_.CreationTim" }
}
但它不起作用。有什么想法吗?谢谢我注意到多个问题。最重要的是,您的newname值是{$\u0.Name-Replace$\u0.Name$\u0.CreationTim}。-replace的语法是-replace'PatternToReplace',NewValue'。如果只定义了模式,如-replace“PatternToReplace”,则匹配的文本将被删除 假设文件名当前为File1.txt。这将永远不会与您的$\uName$\uCreationTime模式匹配,例如File1.txt23.01.2015 23.15.59,因此它将永远不会替换/修改名称,结果将是您的文件重命名为其当前名称 此外: CreationTim缺少一个e 在$\名称$\创建即时消息中,您正在访问属性。要在字符串中包含属性的值,需要使用子表达式$like$$\.Name$$\.CreationTime,或者使用格式运算符,如{0}{1}-f$\.Name,$\.CreationTime 您使用-Recurse,这意味着您需要子文件夹。文件夹也将被重命名,当文件的路径不再存在时,重命名parentfolder可能会导致错误。 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 }
}
演示:
CreationTim或CreationTime-typo?感谢您的回答,事实上,当我执行它时,我会收到以下错误:重命名项:无法重新命名为cible spécifiée,车辆报告是否符合设备名称。Au caractère Ligne:5:5+重命名项目-新名称{{{0}{1}{2}-f$$.BaseName、$.CreationTime、$.Extend…+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~,PSArgumentException+FullyQualifiedErrorId:Argument,Microsoft.PowerShell.Commands.RenameItemCommand脚本可以工作。您得到的错误是因为新文件名被解释为完整路径。您的文件名是否包含任何特殊字符?如果没有,则我猜您的区域设置将CreationTime作为som返回类似于01\02\2015…您需要为日期时间指定格式。您没有指定格式,所以我使用默认格式进行区域设置。请尝试更新答案。是的,您是对的,因为当我执行此命令Get ChildItem | select object Creationtime时,我会获得mm/dd/yyyy格式。我正在尝试修复它…这就是:Functionn Rename文件夹文件{Param[String]$path Get Childitem$path-Recurse |仅在对象{!$\uu.PSIsContainer}的位置获取文件| Rename Item-NewName{{{0}{1}{2}-f$\u0.BaseName,$\u0.CreationTime.ToStringdd-mm-yyyy,$\u0.Extension}重命名文件夹文件-路径D:\Music\Lessons
#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