2017-08-16 214 views
1

我正在嘗試使批處理文件命名更容易爲我的最終用戶。在拍攝我們的位置時,根據位置的大小,我們有時只能拍攝1張照片或500張照片。下面的代碼精美的作品批量重命名我們的照片基礎上多少文件目錄:PowerShell命令批量重命名文件

$prefix = "[SomePrefix]" 
$files = Get-ChildItem 
$id = 1 
$files | foreach { Rename-Item -Path $_.fullname -NewName ($prefix + ((($id++).tostring()).padleft(($files.count.tostring()).length) -replace ' ','0') + $_.extension) } 

代碼墊基礎上的文件目錄中的數量,即1前導零的照片文件名,如果總數小於9個文件,則爲2,3,4,5; 01,02,03,04,05,如果文件總數在10到99之間; 001,002,003,004,005如果文件總數在100和999之間。

我需要修改此代碼,以便它始終保留3個前導零001,002,003,004,005無論如何目錄中的文件數量。但是,我確實需要通過現有目錄進行遞歸的代碼,以便我可以根據數字(0-9; 10-99; 100-999)消除必須將照片組織到不同文件夾中的用戶,並運行單獨的代碼行每。

示例照片文件名約定:PREFIX_001.jpg

誰能告訴我如何修改上面的代碼,以滿足我的需要?

+0

感謝所有誰評論。經過與辦公室同事的一番商議後,我們相信我們已經找到了以下代碼: – user63471

回答

0

PadLeft在這裏不需要。

.ToString("000")將導致數字被填充到3位數。

看到號碼的頁面格式的一些細節here

,你可以調整你的代碼總是墊數字的最小所需數量的這樣:

$Prefix = "[SomePrefix]" 
$Files = Get-ChildItem 
$PadTo = '0'*$Files.Count.ToString().Length 
$ID = 1 
$Files | ForEach { Rename-Item -LiteralPath $_.fullname -NewName ($prefix + ($id++).tostring($PadTo) + $_.extension) } 

這將創建一個字符串$PadTo這只是0的數量,取決於您的目錄中有多少個文件,如果您有100-999文件,它將有3個0's,任何高於或低於4,5等都要匹配。

+0

感謝您的協助!我嘗試了您的修改後的代碼,但這仍然需要最終用戶來組織他們的照片並手動修改$ PadTo。我需要一個代碼,用3個前導零來重新命名照片1-9,照片10-99帶1個前導零,照片100-999照原樣。這是有道理的,還是我不理解? – user63471

+0

@ user63471你可以向Get-Childitem調用添加-recurse,並像那樣做?比單獨檢查更容易,您也可以將PadTo設置爲「000」,以便始終將其傳遞到3位數字。這似乎是你想要的。 – ConnorLSW

0

我建議小心方括號,因爲這可以解釋爲各種通配符。

$Prefix = '[SomePrefix]' 
$Path = '.' 
$Folders = Get-ChildItem -LiteralPath $Path -Directory -Recurse 
ForEach ($Folder in $Folders) 
{ 
    $Counter = 0 
    Get-ChildItem $Folder -File | 
     ForEach-Object { 
      Rename-Item $_.FullName -NewName "${Prefix}_$($Counter.ToString('000'))$($_.Extension)" 
      $Counter++ 
     } 
} 

該解決方案將遞歸重命名所有文件在Prefix_001.ext格式基礎上的$Path定義的目錄