我在Rename-Itemcmdlet 中遇到了非常奇怪的行為。
我想重命名一堆檔案,所有檔案都位于同一個(當前)目錄中。在重命名之前,我會決議原始檔案名,對其進行一些轉換,最后Rename-Item在回圈中組合生成的檔案名呼叫命令。
當我添加-WhatIf選項時Rename-Item,我可以看到它告訴我運行它會正確重命名檔案。此外,如果我在重命名之前通過列印$newFileName變數的值來輸出結果檔案名,它也會顯示正確的新檔案名。
但是,當我洗掉-WhatIf選項并運行腳本時,實際上沒有重命名,也沒有顯示錯誤或警告!
我做了一些調查,發現如果我 $_.Extension從代碼中洗掉,cmdlet 實際上會重命名檔案,但它們當然沒有擴展名。但我不明白為什么它不能與添加的擴展一起作業?!
原始檔案名示例:
x 005-Fuji-S-200-CA-6-F81-x 15A RAW.tif.
目標是交換檔案名中間部分的前半部分和后半部分,因此生成的名稱類似于x x-Fuji-S-200-CA-6-F81-005 15A RAW.tif.
腳本(它總是從檔案所在的目錄運行):
Get-ChildItem -File -Filter '*.tif' -Recurse |
ForEach {
$baseNameSpaced = $_.BaseName -split ' '
$filmIdArray = $baseNameSpaced[1] -split '-'
$first = $filmIdArray[0]
$filmIdArray[0] = $filmIdArray[-1]
$filmIdArray[-1] = $first
$baseNameSpaced[1] = $filmIdArray -join '-'
$newFileName = $($baseNameSpaced -join ' ') $_.Extension
Rename-Item -Path $_.FullName -NewName $newFileName
}
uj5u.com熱心網友回復:
你正在修改你正在回圈的東西。首先獲取完整的檔案串列。一種常見的做法是將 get-childitem 放在括號中,以便它首先完成。
(Get-ChildItem -File -Filter '*.tif' -Recurse) |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524878.html
上一篇:根據名字和姓氏在本地創建用戶
