我正在嘗試使用 PS 重命名大共享中的一堆檔案,其中一個要求是從檔案名中洗掉一個點。我已經用我相當基本的技能測驗了一些東西,當然最基本的腳本會破壞檔案擴展名。
我終于想出了這樣的事情:
gci *.xlsx | rename-item -newname {$_.Name.replace(".","") $_.extension }
但這會將擴展名添加到檔案名的末尾(同時保持檔案擴展名不變)
我想我可以使用這樣的東西來消除最后四個符號:
gci *.xlsx | rename-item -newname { $_.basename.substring(0,$_.basename.length-4) $_.extension }
總的來說,這似乎是一個過于復雜的操作,也可能會弄亂沒有點的檔案(除非我將 xlsx 指定為僅要洗掉的 4 個符號)
有人能指出我正確的方向嗎?;-)
uj5u.com熱心網友回復:
您的第二次嘗試走在了正確的軌道上:使用實體[1]輸出的.BaseNameand.Extension屬性允許您分別修改基本名稱(沒有擴展名的檔案名),然后重新附加擴展名以形成完整檔案名:[System.IO.FileInfo]Get-ChildItem
Get-ChildItem *.xlsx |
Rename-Item -NewName { ($_.BaseName -replace '\.') $_.Extension } -WhatIf
注意:上面命令中的-WhatIf常用引數是預覽操作。-WhatIf 一旦您確定該操作將執行您想要的操作,請洗掉。
以上使用基于regex的運算子從基名稱中洗掉所有實體;因為是一個正則運算式元字符(代表任何單個字符),它必須被轉義,以便按字面意思使用。
在這個簡單的例子中,您也可以使用型別的方法( ),但它提供了更多的功能并且更少的驚喜 - 請參閱此答案以獲取更多資訊。-replace ..\.[string].Replace() $_.BaseName.Replace('.', '')-replace
恰當的例子:假設您只想從基本名稱中洗掉第一個; 允許您按以下方式執行此操作(但您不能使用 執行此操作):.-replace.Replace()
'foo.bar.baz' -replace '\.(.*)$', '$1' # -> 'foobar.baz'
[1].BaseName不是這種型別的原生屬性;相反,它是PowerShell使用其ETS(擴展型別系統)裝飾型別實體的屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474187.html
標籤:电源外壳
