2016-06-29 9 views
1

私は私たちの担当者のために取り組んでいる簡単なプロジェクトを持っています。ファイルからフォルダ名とテキストデータを抽出するPowershellスクリプト

私たちには、数千のCADジョブがネットワークファイル共有に格納されています。ファイル構造は、CADジョブのための親フォルダが存在するようなものです。フォルダ名の一部にジョブ番号が含まれています。フォルダ内には、必要な接続情報を含む.iniテキストファイルが1つから数多くあります。

すべてのフォルダを検索し、フォルダ名からジョブ番号を抽出し、iniファイルからすべての接続値を抽出するPowershellソリューションを探しています。

たとえば、CM8252390-3という名前のフォルダの場合、ジョブ番号は8252390-3です。このフォルダの中には3つのiniファイルがあります。 INIファイルの中に、それは次のようになりされています

[Connection] 
Name=IMP_Acme_3.5 
[Origin] 
X=-15.044784 
Y=19.620095 
Z=44.621395 

だから私のプログラムは私に次のような結果

これを実行する方法についていくつかのPowerShellのサンプルをお探し
Job   Connection 
8252390-3 IMP_Acme1_3.5 
8252390-3 IMP_Acme2_3.5 
8252390-3 IMP_Acme3_3.5 
8254260-1 IMP_Acme3_2.4 
8254260-1 IMP_Acme3_4.1 
...continued for all folders in the network share 

を与える必要があります。私はPowershell初心者なので、経験は限られています。 Windows/DOSのバットファイルなどの経験があります。

ありがとうございます。

更新日:

私はもう少ししました。ここまで私がこれまで持っていたことがあります。フォルダ名を$ job_numに解析します。

Get-ChildItem C:\temp\pwrshell | ForEach-Object -Process { if ($_.PSIsContainer) 
                   { 
                   if ($_.Name.Substring(0,2) -eq 'CM') 
                    { 
                    $job_num = $_.Name.Substring(4) 
                    } 
                   elseif ($_.Name.Substring(0,3) -eq 'Pri' -or 'Hyb' -or 'Had' -or 'Dmo') 
                    { 
                    $job_num = $_.Name.Substring(5) 
                    } 
                   $_.Name+' '+$job_num 
                   } 
                 } 

誰かを助けて、私にiniファイルのコードを教えてください。彼らが私にそれを理解するのを待つならば、VPは別の解決策を見つけるかもしれません。

+0

こんにちは、いくつかのコードを書く問題で、それを含めて、私たちがお手伝いしますしてみてください。 – sodawillow

+0

私がやることのできるステップ:ディレクトリの検索、名前の解析、INIファイルの取得、コンテンツの取得スクリプト内に入れてみてください – kcoder24

+0

Joe、あなたの(不完全な)回答を削除し、質問を編集して研究を追加してください。回答は、喜んで助けてくれる人が投稿します。 – sodawillow

答えて

0

これは、あなたが探しているの出力を提供するかもしれない:

# // Declare an array to hold job objects 
$aJobs = @() 

Get-ChildItem C:\temp\pwrshell | ForEach-Object -Process { 
    if ($_.PSIsContainer) 
    { 
     # // Store subfolder path in a variable 
     $sFolderPath = $_.FullName 

     if ($_.Name.Substring(0,2) -eq 'CM') 
     { 
      $job_num = $_.Name.Substring(2) # // Edited, value 4 returns incomplete string 
     } 
     elseif ($_.Name.Substring(0,3) -eq 'Pri' -or 'Hyb' -or 'Had' -or 'Dmo') 
     { 
      $job_num = $_.Name.Substring(5) 
     } 
     $_.Name+' '+$job_num 

     # // Loop through all files in folder with .ini extension 

     Get-ChildItem $sFolderPath | Where {$_.Extension -like '.ini'} | foreach { 

      $sFilepath = $_.FullName 

      # // Read file contents 
      $aFiledata = Get-Content $sFilepath 

      # // Loop through file lines, looking for line starting with Name= 
      foreach ($sFileline in $aFiledata) 
      { 
       if ($sFileline.SubString(0,5) -eq 'Name=') 
       { 
        $connection_name = $sFileline.SubString(5) 

        # // Create a custom PowerShell object to hold values 
        $JobObject = New-Object PSCustomObject -Property @{ 
         "Job"  = $job_num 
         "Connection" = $connection_name 
        } 

        # // Add job object to array 
        $aJobs += $JobObject 
       } 
      } 
     } 
    } 
} 

# // Display output 
$aJobs | Format-Table Job,Connection 
+0

Drasen、ありがとうございます!完璧。ちょうど私が必要なもの。 – Joe

関連する問題