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

看板Windows作者 (傑克葡萄)時間1月前 (2024/10/19 15:29), 1月前編輯推噓5(5044)
留言49則, 5人參與, 4周前最新討論串1/1
公司電腦有鎖軟體,無法用改名軟體 因為文件上傳有檔名格式要求 小弟的需求是本來檔名前8碼編號保留,後面新增底線與編號。 上網找了一下文章,PoweShell指令自己嘗試更改有稍微完成,但遇到困擾是檔名保留了 ,但編號沒辦法因為不同檔名重新編號…. 以下是改完後的,求大神出手 Get-ChildItem *.pdf | ForEach-Object -Begin { $count = 1 } -Process { Rename-Item $_ -NewName ($_.Name.Substring(0,8)+"_$count.pdf" -f $c++) $count++ } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.8.38.198 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Windows/M.1729322975.A.C43.html

10/19 17:16, 1月前 , 1F
在字串中必須要用$()包含程式碼,用來與一般字串區別,
10/19 17:16, 1F

10/19 17:16, 1月前 , 2F
所以是"_$($count).pdf"。另外,為何會有 -f $c++?這看起
10/19 17:16, 2F

10/19 17:16, 1月前 , 3F
來是多餘的,沒有任何可以代入的地方。
10/19 17:16, 3F

10/19 17:19, 1月前 , 4F
順便一提,不要把副檔名寫死比較好,如果會混合檔案格式
10/19 17:19, 4F

10/19 18:01, 1月前 , 5F
這種問題直接問copilot
10/19 18:01, 5F

10/19 18:05, 1月前 , 6F
Get-ChildItem -LiteralPath . -Filter *.pdf | ForEach-O
10/19 18:05, 6F

10/19 18:05, 1月前 , 7F
bject -Begin {$c = 0} -Proces {Rename-Item -LiteralPat
10/19 18:05, 7F

10/19 18:05, 1月前 , 8F
h $_.FullName (Join-Path $_.DirectoryName ($_.Name -re
10/19 18:05, 8F

10/19 18:05, 1月前 , 9F
place '^(.{1,8}).*?(\.[^\.]+)?$', ('$1' + "_$c" + '$2'
10/19 18:05, 9F

10/19 18:05, 1月前 , 10F
))); $c++}
10/19 18:05, 10F

10/19 18:14, 1月前 , 11F
join-path 是多餘的,不需要給完整的目標
10/19 18:14, 11F

10/19 22:10, 1月前 , 12F
用完整路徑只是為了避開一個bug,不過為此 -LiteralPath .
10/19 22:10, 12F

10/19 22:10, 1月前 , 13F
也應該要改成 -LiteralPath $PWD.Path
10/19 22:10, 13F
感謝,不過運轉後,不是想要的。 想要的是這樣: 原檔名 ---> 新檔名 32010001(01) 32010001_01 32010001(02) 32010001_02 50000000(01) 50000000_01 60110000(01) 60110000_01 60110000(02) 60110000_02 71001111(01) 71001111_01 98765432(01) 98765432_01 大概就是保留指定的字元作為檔名,相同檔名進行編號,不同檔名的編號重新編號這樣。 ※ 編輯: jackygrap (114.39.33.135 臺灣), 10/19/2024 23:56:04

10/20 04:22, 1月前 , 14F
$suffix=''; while(Test-path -LiteralPath ($newPath =
10/20 04:22, 14F

10/20 04:22, 1月前 , 15F
Join-Path $_.DirectoryName ($baseName+$suffix+$extensi
10/20 04:22, 15F

10/20 04:22, 1月前 , 16F
on))){$suffix = "_$c" -f c++}; Rename-Item $_ $newPath
10/20 04:22, 16F

10/20 04:22, 1月前 , 17F
產生新路徑的地方大概改成這樣,至於把檔名拆成basename
10/20 04:22, 17F

10/20 04:22, 1月前 , 18F
與副檔名的方法可以參考我上面用的正規表示法,因為5.1的
10/20 04:22, 18F

10/20 04:22, 1月前 , 19F
split-path不支援分拆出basename
10/20 04:22, 19F

10/20 04:49, 1月前 , 20F

10/20 04:50, 1月前 , 21F
你可以參考這個函式
10/20 04:50, 21F

10/20 04:52, 1月前 , 22F
這裡借用了.net 的 IO.Path 物件
10/20 04:52, 22F

10/20 05:24, 1月前 , 23F
還有按照你的需求,不同檔案要重新計數,你不應該把初始值
10/20 05:24, 23F

10/20 05:24, 1月前 , 24F
寫在 -Begin {} 中,因為它管道中只會執行一次,也就是只
10/20 05:24, 24F

10/20 05:24, 1月前 , 25F
有第一個檔案之前會執行到
10/20 05:24, 25F

10/20 05:38, 1月前 , 26F
應該在 -Process { } 中最上方
10/20 05:38, 26F

10/20 12:24, 1月前 , 27F
就你的範例原本的編號如果是有效的 可以考慮直接沿
10/20 12:24, 27F

10/20 12:24, 1月前 , 28F
10/20 12:24, 28F

10/20 13:45, 1月前 , 29F
我覺得還是不要用Windows PowerShell 5.1吧
10/20 13:45, 29F

10/20 13:46, 1月前 , 30F
要避開太多奇怪的問題了
10/20 13:46, 30F

10/20 13:48, 1月前 , 31F

10/20 13:49, 1月前 , 32F
左邊是內建的5.1,右邊是最新的跨平台版
10/20 13:49, 32F

10/20 13:53, 1月前 , 33F
真的要用你就照h大的說法取原本括號內的編號來用就好
10/20 13:53, 33F

10/20 13:55, 1月前 , 34F
用正規表示法選取字串,如果來源檔名保證規律用分割法即可
10/20 13:55, 34F

10/20 14:13, 1月前 , 35F

10/20 14:17, 1月前 , 36F
參考圖片就好,16f推文有個地方錯了
10/20 14:17, 36F

10/20 14:29, 1月前 , 37F
檔名都規律的話 '^(.*?)\((\d+)\)(\.[^\.]+)$' 就可以了
10/20 14:29, 37F
有,檔名都規律的話,大神的寫法達成了 >口< 如大神所說,除了前面編碼8個字元是規律的外, 後面編碼實際上都會這樣....(跑了大神的寫法) 原檔名 --實際運作-→ 新檔名 --想要成果--> 想要檔名 32010001 32010001 32010001_1 32010001(02) 32010001_2 32010001_2 50000000 50000000 50000000_1 60110000 60110000 60110000_1 60110000(02) 60110000_2 60110000_2 71001111 71001111 71001111_1 98765432 98765432 98765432_1 50103345 50103345 50103345_1 50103345(2) 50103345_2 50103345_2 50103345(3) 50103345_3 50103345_3 50103345(4) 50103345_4 50103345_4 '^(.{1,8}).*?\((\d+)\).*?(\.[^\.]+)?$', '$1_$2$3' ← 這邊又該如何修正比較好 ※ 編輯: jackygrap (114.39.33.135 臺灣), 10/20/2024 19:26:23

10/21 15:44, 1月前 , 38F
沒有括號的傢伙一定對應到1嗎
10/21 15:44, 38F

10/21 15:46, 1月前 , 39F
成立的話那傢伙特別處理,括號的數字直接繼承,會比較
10/21 15:46, 39F

10/21 15:46, 1月前 , 40F
省事ㄅ
10/21 15:46, 40F

10/21 15:59, 1月前 , 41F
ReNamer有免安裝版啊
10/21 15:59, 41F

10/21 17:15, 1月前 , 42F
有些免安裝程式也會在系統留下使用痕跡
10/21 17:15, 42F

10/21 17:15, 1月前 , 43F
這就要看樓主公司怎麼怎麼規定了
10/21 17:15, 43F
免安裝也被IT擋~(嘆氣)

10/21 17:21, 1月前 , 44F
我也是推ReNamer,但沒有深色主題用起來不夠舒服…
10/21 17:21, 44F

10/21 17:25, 1月前 , 45F
另外,你的問題可以用-match與if-else個別處理
10/21 17:25, 45F

10/21 17:29, 1月前 , 46F

10/21 21:46, 1月前 , 47F
我猜大概是選一團檔案F2 後來又想改結果回不去了XD
10/21 21:46, 47F
沒辦法 系統毛太多,每個人編號習慣五花八門Orz ※ 編輯: jackygrap (114.39.33.135 臺灣), 10/21/2024 23:21:05

10/22 21:04, 1月前 , 48F
安裝免安裝都擋卻沒擋PowerShell 這IT不及格吧(欸
10/22 21:04, 48F

10/23 12:45, 4周前 , 49F
文章代碼(AID): #1d4r_Vn3 (Windows)
文章代碼(AID): #1d4r_Vn3 (Windows)