我有一個檔案名稱“+1.txt”,我希望將其重命名為“+2.txt”
我的 Powershell 腳本是:
$old = "\+1"
$new = "\+2"
Get-ChildItem | Rename-Item -NewName {$_.name -replace $old, $new }
這將返回:
powershell : Rename-Item : Cannot rename the specified target, because it represents a path
我該如何修正這個問題?
答案1
PowerShell 中正確的轉義字元是 `(後面的勾號)。
例如,您可以編寫以下內容來取得帶有換行符的字串:
$newline = "`n"
另外,至少在測試中,我不需要逃避它。所以剛剛Rename-Item "+1.txt" "+2.txt"
工作了。嘗試使用-replace
需要第一個參數中的反斜杠,但第二個參數中不需要。所以$new = "+2"
應該有效。原因是第一個參數-replace
可能是正規表示式。因此該術語需要一個不經過特殊處理的字面+。第二個術語是作為文字字串處理,因此您不需要任何特殊的轉義或類似的操作。
答案2
-replace
使用正規表示式,但不需要手動轉義字元。
Get-ChildItem 迭代目前路徑中的所有項目,您必須指定名稱
$old = "+1.txt"
$new = "+2.txt"
Get-ChildItem $old -file|
Rename-Item -NewName {$_.FullName -replace [regex]::escape($old), $new }
或使用 where to -match
only 模式。
$old = "+1.txt"
$new = "+2.txt"
Get-ChildItem |
where Name -match [regex]::escape($old)|
Rename-Item -NewName $new