2014-02-14 74 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}" 
相关问题