當我嘗試重命名檔案時,為什麼 Powershell 告訴我我的檔案代表一個路徑?

當我嘗試重命名檔案時,為什麼 Powershell 告訴我我的檔案代表一個路徑?

我有一個檔案名稱“+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 -matchonly 模式。

$old = "+1.txt"
$new = "+2.txt"
Get-ChildItem | 
  where Name -match [regex]::escape($old)|
    Rename-Item -NewName $new 

相關內容