2017-10-06 59 views
0

我得到這個文件夾結構PowerShell的重命名的特殊目錄遞歸

C:\用戶\ MYUSER \桌面 包括稱爲文件夾

  • BL-100
  • BL-105
  • BL-108

等等...... 大多數BL文件夾存儲file.xml,b並非全部。

因此,在桌面上有很多以BL開頭的文件夾,而且存儲file.xml最多但不是全部。

現在我想搜索的開始與BL-所有文件夾和存儲file.xml和重命名這些文件夾,RG-100,RG-105,RG-108等

目前我得到這個腳本:

foreach($Directory in Get-ChildItem -Path C:\Users\myUser\Desktop -Recurse | Where-Object{($_.Name.Substring(0,3) -eq 'BL-')}){ 

} 

這不起作用,並呈現出我的錯誤:異常調用「串」與「2」參數(S):「索引和長度必須引用位置的字符串中的參數名稱:長度「

任何人都可以幫忙嗎?

+1

'$ _命名樣 'BL - *''。注意:如果子字符串無法完成操作,可能會失敗;例如''1'.Substring(0,2)'。 – JohnLBevan

+1

除了@john註釋(這是答案),爲了理解這個錯誤的原因,請考慮一下名爲「AB」的文件夾(只有兩個字符)會發生什麼情況。現在'length'參數超出範圍(字符串只有兩個字符長度,你要求3個字符) –

+1

工作得很好,謝謝@john! –

回答

1

您看到的錯誤是因爲SubString由於某種原因失敗。最可能的原因是如果字符串不夠長;例如如果您有一個名稱爲1個字符的文件夾。要看我的意思,請嘗試運行:'1'.Substring(0,2)

爲了避免這種情況,您可以使用like運算符。例如

foreach($Directory in (
    Get-ChildItem -LiteralPath 'C:\Users\myUser\Desktop' -Recurse ` 
    | Where-Object{($_.Name -like 'BL-*')} 
)){ 
    #... 
} 
0

只要做到這一點:

Get-ChildItem "C:\Users\myuser\Desktop" -directory -Filter "BL-*"