簡體   English   中英

重命名文件夾中的所有文件,並使用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" }值為{ $_.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”,因此它將永遠不會替換/修改名稱,其結果是文件將重命名為其當前名稱。

也:

  1. CreationTim缺少e
  2. "$_.Name$_.CreationTim" ,您正在訪問屬性。 要將屬性的值包含在字符串中,您需要使用子表達式$()"$($_.Name)$($_.CreationTime)"或格式運算符,如"{0}{1}" -f $_.Name, $_.CreationTime
  3. 您使用-Recurse ,這意味着您需要子文件夾。 文件夾也將被重命名,這在以后的文件路徑不再存在(父文件夾被重命名)時可能導致錯誤。
  4. Name -屬性包括擴展名,因此,如果您使用-replace命令權限,則“ File1.txt”將變為“ File1.txt23.01.2015 23.15.59”。 沒有擴展名的文件。 要分別獲取文件名和擴展名,請使用BaseNameExtension -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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM