簡體   English   中英

Windows PowerShell批處理文件重命名

[英]Windows PowerShell Batch File Rename

目前,我手動瀏覽每個文件並使用通用重命名過程對其進行更新。
我只是開始嘗試弄清楚如何使用Windows PowerShell來重命名具有共同結構的一堆文件。 問題是,我見過的所有示例都使用通用擴展替換某些內容。 我想刪除擴展名后的所有內容,並且出現錯誤。

例子:

64244350.NSFM3V@.NO_BATCHES.20150108073838322
64244882.NSFM3V@.NO_BATCHES.20150108073534804

我希望它最終像是:

64244350.NSFM3V
64244882.NSFM3V

.NSFM3V是所有文件中的常見因素,但是前后存在隨機性。 這是我在PowerShell中創建內容的第一次嘗試:

Get-ChildItem *.NSFM3V* | Rename-Item -NewName {$_name -Replace *.{$_name}.*,""}

我的Get-ChildItem .NSFM3V可以從文件夾中獲取所有文件,但無法重命名。

謝謝你的時間!

您可以這樣做:

gci *.NSFM3V* | rename-item -newname { $_.name -replace '(.*)@.*', '$1' }

使用正則表達式獲取@的左側並將其用於替換中。

說明:

  • 來自gci任何匹配項都將傳遞到管道,傳遞的對象將被賦予特殊變量$_
  • Rename-Item從管道中獲取對象$_並使用{..}的替換來制作新名稱
  • -replace內的正則表達式采用對象的name屬性並應用替換
  • (.*)表示匹配任何內容 注意方括號,這些很重要,因為它們構成了一個捕獲小組
  • @.*表示匹配@后跟任何內容
  • 這意味着結合使用時,捕獲到@之后的所有內容
  • '$1'是對捕獲組的引用,因此從本質-NewName ,您將整個$_.name -NewName值替換為(最后一個) @所有內容,並將其傳遞給-NewName參數

一種不使用正則表達式方法的簡單替代方法,這通常會使閱讀/理解困難。

Get-ChildItem *.NSFM3V* | Rename-Item -NewName {($_.Name -split "@")[0]}

GJ干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM