2016-08-09 3 views
0

再帰がフォルダ「C:\」に到達するとすぐに処理する必要があるすべてのファイルを探しているとき、私のフォルダ構造は "C:\ Temp \ SalesOrder \ 20160809 \ cc.txt" Temp \ SalesOrder "&" C:\ Temp \ SalesOrder \ 20160809 "処理中のcc.txtファイル。どのように私は、サブフォルダとファイルのみを処理し横切らないようにするGCI書き直しん「C:\ Tempにを\ SalesOrder 20160809 \」Windows powershellファイルプロセスの複製

$flatFilePath = "C:\Temp\Email.csv" 
$flatFile = Import-Csv -Path $flatFilePath -Header Dir,Email 
$emailID = @{} 
foreach ($record in $flatFile) { $emailID[$record.Dir]=$record.Email } 

# organization folder 
$orgFolder = Get-ChildItem -Path "C:\Temp\" -Recurse -Exclude *.* 

# Send email 
foreach ($dir in $orgFolder) { 
    $processedfiles = $null 
    $emailTo = $null 

    Get-ChildItem -Path $dir.FullName -Recurse -Include *.txt,*.xls,*.csv,*.xlsx | ? { $_.FullName } | 
     Foreach-Object { 
      [string]$internalOrg = [System.IO.DirectoryInfo]$_.Directory.Name 
      $processedfiles += [string][System.IO.Path]::GetFileName($_.FullName) + " | "; 
     } 

    $emailTo = $emailID.Get_Item($dir.Name) -split ";" 

    if ($processedfiles) { Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject -Body "$Body $processedfiles" -SmtpServer $SMTPServer -port $SMTPPort } 

} 

問題エリア:

Get-ChildItem -Path $dir.FullName -Recurse -Include *.txt,*.xls,*.csv,*.xlsx | ? { $_.FullName } | 
     Foreach-Object { 
      [string]$internalOrg = [System.IO.DirectoryInfo]$_.Directory.Name 
      $processedfiles += [string][System.IO.Path]::GetFileName($_.FullName) + " | "; 
     } 
+0

をあなたはGCIを取得しようとしているファイルを正確に何について少しより多くの情報を提供することはできますか?たとえば、フォルダ名だけを取得しようとしていますか? cc.txt以外のファイルですか? cc.txtと同じフォルダにないファイルはありますか? –

+0

私はこれらのファイル "* .txt、*。xls、*。csv、*。xlsx"を含むすべてのフォルダを取得しようとしています。たとえば、 "C:\ Temp \"には、 "folder_a"、 "folder_b"、 "folder_c"、 "folder_d"、 "folder_e"というサブフォルダがあります。サブフォルダ "folder_a"、 "folder_e"には、これらの "C:\ Temp \ folder_a"と "C:\ Temp \ folder_e"だけで必要な条件に一致するファイルがあります。 – user25407

答えて

0

あなたが唯一のフォルダを選択するために、正規表現を使用することができます私はあなたの問題を理解したよう日付構造に

$orgFolder = Get-ChildItem -Path 'C:\Temp\' -Recurse -Exclude *.* 
$orgfolder = $orgfolder -match '(\\(\d{2})(\d{2})(\d{2})(\d{2}))' 
0

を持っている、あなたは小さなバグと右のコードを持っています。あなたのループでは ...

Foreach-Object { 
     [string]$internalOrg = [System.IO.DirectoryInfo]$_.Directory.Name 
     $processedfiles += [string][System.IO.Path]::GetFileName($_.FullName) + " | "; 
    } 

は...あなたの代わりに使用すると、フォルダ名を抽出$ internalOrg変数のファイル名を、連結します。

それはあなたがフォルダたい場合は、次のようになります。

Foreach-Object { 
     [string]$internalOrg = [System.IO.DirectoryInfo]$_.Directory.Name 
     $processedfiles += [string][System.IO.Path]::GetFileName($internalOrg) + " | "; 
    } 
関連する問題