[問題] 批次修改,保留舊檔名並新增編號

作者: jackygrap (傑克葡萄)   2024-10-19 15:29:33
公司電腦有鎖軟體,無法用改名軟體
因為文件上傳有檔名格式要求
小弟的需求是本來檔名前8碼編號保留,後面新增底線與編號。
上網找了一下文章,PoweShell指令自己嘗試更改有稍微完成,但遇到困擾是檔名保留了
,但編號沒辦法因為不同檔名重新編號….
以下是改完後的,求大神出手
Get-ChildItem *.pdf | ForEach-Object -Begin {
$count = 1
} -Process {
Rename-Item $_ -NewName ($_.Name.Substring(0,8)+"_$count.pdf" -f $c++)
$count++
}
作者: falcon (falken)   2024-10-19 17:16:00
在字串中必須要用$()包含程式碼,用來與一般字串區別,所以是"_$($count).pdf"。另外,為何會有 -f $c++?這看起來是多餘的,沒有任何可以代入的地方。順便一提,不要把副檔名寫死比較好,如果會混合檔案格式
作者: thomaschion (老湯)   2024-10-19 18:01:00
這種問題直接問copilot
作者: falcon (falken)   2024-10-19 18:05:00
Get-ChildItem -LiteralPath . -Filter *.pdf | ForEach-Object -Begin {$c = 0} -Proces {Rename-Item -LiteralPath $_.FullName (Join-Path $_.DirectoryName ($_.Name -replace '^(.{1,8}).*?(\.[^\.]+)?$', ('$1' + "_$c" + '$2'))); $c++}join-path 是多餘的,不需要給完整的目標用完整路徑只是為了避開一個bug,不過為此 -LiteralPath .也應該要改成 -LiteralPath $PWD.Path$suffix=''; while(Test-path -LiteralPath ($newPath =Join-Path $_.DirectoryName ($baseName+$suffix+$extension))){$suffix = "_$c" -f c++}; Rename-Item $_ $newPath產生新路徑的地方大概改成這樣,至於把檔名拆成basename與副檔名的方法可以參考我上面用的正規表示法,因為5.1的split-path不支援分拆出basenamehttps://i.imgur.com/DkCaj7k.jpeg你可以參考這個函式這裡借用了.net 的 IO.Path 物件還有按照你的需求,不同檔案要重新計數,你不應該把初始值寫在 -Begin {} 中,因為它管道中只會執行一次,也就是只有第一個檔案之前會執行到應該在 -Process { } 中最上方
作者: hunandy14 (Charlott.HonG)   2024-10-20 12:24:00
就你的範例原本的編號如果是有效的 可以考慮直接沿用
作者: falcon (falken)   2024-10-20 13:45:00
我覺得還是不要用Windows PowerShell 5.1吧要避開太多奇怪的問題了https://i.imgur.com/jI3VtTD.png左邊是內建的5.1,右邊是最新的跨平台版真的要用你就照h大的說法取原本括號內的編號來用就好用正規表示法選取字串,如果來源檔名保證規律用分割法即可https://i.imgur.com/yx8iZwZ.png參考圖片就好,16f推文有個地方錯了檔名都規律的話 '^(.*?)\((\d+)\)(\.[^\.]+)$' 就可以了
作者: hunandy14 (Charlott.HonG)   2024-10-21 15:44:00
沒有括號的傢伙一定對應到1嗎成立的話那傢伙特別處理,括號的數字直接繼承,會比較省事ㄅ
作者: allen65535 (劇情急轉直下)   2024-10-21 15:59:00
ReNamer有免安裝版啊
作者: falcon (falken)   2024-10-21 17:15:00
有些免安裝程式也會在系統留下使用痕跡這就要看樓主公司怎麼怎麼規定了我也是推ReNamer,但沒有深色主題用起來不夠舒服…另外,你的問題可以用-match與if-else個別處理https://zh.m.wikipedia.org/zh-tw/regex
作者: hunandy14 (Charlott.HonG)   2024-10-21 21:46:00
我猜大概是選一團檔案F2 後來又想改結果回不去了XD
作者: Arbin (路人_Lv菜逼八)   2024-10-22 21:04:00
安裝免安裝都擋卻沒擋PowerShell 這IT不及格吧(欸
作者: hunandy14 (Charlott.HonG)   2024-10-23 12:45:00

Links booklink

Contact Us: admin [ a t ] ucptt.com