2014-02-14 80 views
0

我有一個文件夾中的文件列表,每個文件夾的格式如下:custID_invID_prodID。對於每個文件,我需要將其分成基於'_'的部分。目前,我有這樣的代碼Powershell腳本從文件夾列表中的文件名中提取信息

$files = Get-ChildItem test *.txt 
$Part = $files.Split(';')[$($files.Split('_').Count-1)] 
Write-Host "${Part}" 

的問題是,似乎$files是所有文件的清單,我需要它來運行自己的每個文件。任何人都可以提供一些關於如何爲整個文件夾做到這一點的指針?

回答

1

「的問題是,它看起來$文件是所有文件的清單,我需要它自身運行的每個文件「。

這是正確的,在文件夾上運行get-childitem會給你一個所有文件(和子文件夾)的列表。爲了一一瀏覽它們,你需要一個循環:

$file = @() 
$files = Get-ChildItem Test *.txt 
foreach($f in $files) 
{ 
    $file += ([String]$f).Split("_") 
    $count = ([String]$f).Split("_") | Measure-Object | select count 
} 
if($count.count -eq 3) { 
    for($i=2; $i -lt $file.length; $i+=3) { 
     $file[$i] = $file[$i].trimend(".txt") 
    } 
} 
+0

謝謝先生!快速的問題,如果一個文件丟失,其中一個部分是否有可能創建一個檢查,並讓它跳過該文件,如果有任何部分丟失?我在計算在名稱中找到'_'多少次? –

+0

對不起!說太快了,我已經通過使用:(Select-String -Pattern([regex]'_ +')-InputObject $ Subject -AllMatches).Matches.Count –

+0

嗯,我很高興你的嘗試和學習! ...我是通過度量對象來做的,並且在有三個ID的情況下做了場景......所以實現2和1不應該很難......也可以先用cast來使用split命令......忘了那個,更新了我的文章 – Cole9350

0

我能夠通過使用此代碼來解決這個問題:

$Part = $file.name.Split('_')[$($file.name.Split('_').Count-1)] 
Write-Host "${Part}" 
相關問題