2016-05-26 1 views
1

gitステータスから新しい\ modifiedファイルのリストを取得するアプリケーションがあります。そのファイルから不完全な文字列を取り出し、連結しますルートdirファイルのパスを指定し、それらのファイルをアーカイブに移動します。私はそれが半分働いているが、私がどのようにpowershellを使用しているのかという性質はエラー報告を提供せず、プロセスは明らかに間違っている。ここで私が使用しようとしているコードです。 (これはいくつかの繰り返しを経て、コメントアウトされた部分を許してください)基本的に私はtxtファイルからGet-Contentをしようとしていますか? \(何らかの理由でtxtを作成するプロセスがスラッシュを愛しています...)、その文字列をスペースで分割します。私が関心のある文字列の唯一の部分は、最後の部分です。これは、既知の作業ルートディレクトリと連結しようとしています。そして、それらをアーカイブの場所に移動しようとしています。あなたが尋ねる前に、これはファイルの性質上、私たちがgitで追跡したくないものです(それらはタイムスタンプされたテスト出力であり、gitではなくテストごとにそれらを保存したい)まだPowershellにかなり新しいです、そして、私の頭をこの岩に対してあまりにも長く叩いています。Powershell - txtから文字列を引き出し、分割してアーカイブに連結します。

Get-Content $outfile | Foreach-Object 
{ 
    #$_.Replace("/","\") 
    #$lineSplit = $_.Split(' ') 
    $_.Split(" ") 
    $filePath = "$repo_dir\$_[-1]" 
    $filePath.Replace('/','\') 
    "File Path Created: $filePath" 
    $untrackedLegacyTestFiles += $filePath 
} 


Get-Content $untrackedLegacyTestFiles | Foreach-Object 
    { 
    Copy-Item $_ $target_root -force 
    "Copying File: $_ to $target_root" 
    } 
} 

$ outfileは、私たちが使用するテストアプリケーションによって生成されたtxtファイルにつながる部分的なファイルパスを持つテキストファイルです。この情報はgitによって提供されるので、$ outfile txtファイルで次のようになります:

!! Some/File/Path/Doc.txt 

"!!"平均的なgitはそれを新しいファイルと見なしますが、 "M"から "??"までの複数の文字である可能性があります。だから私はそれをスペース上で分割し、最後の要素だけを取ろうとしているのです。 希望の出力は分割された文字列の最後の要素を$ outfile(Some/File/Path/Doc.txt)から取り出し、それを$ repo_dirと連結して完全なファイルパスを作成し、Docを移動することです。 txtをアーカイブの場所($ target_root)にコピーします。

+0

'$ outfile'とあなたの望む出力からの文字列の例?また、どこにこだわっていますか? –

+0

$ outfileの例を追加しました。役に立ったら嬉しいです – user3749224

+0

はい、あります。私の答えはあなたを助けることができると思う。 –

答えて

1

PowerShellでパスを結合するには、Join-Pathコマンドレットを使用する必要があります。あなたの文字列からパスを抽出するには、regexを使用することができます。

$extractedPath = [regex]::Match('!! Some/File/Path/Doc.txt', '.*\s(.+)$').Groups[1].Value 
$filePath = Join-Path $repo_dir $extractedPath 

Join-Path cmldetはまた、すべての前方を変換するバックスラッシュに:-)それらを交換するので、必要にスラッシュません。

あなたの全体のスクリプトは次のようになります。あなたのコードでregexを使用することを好まない場合は

Get-Content $outfile | Foreach-Object { 
    $path = Join-Path $repo_dir ([regex]::Match($_, '.*\s(.+)$').Groups[1].Value) 
    Copy-Item $path $target_root -force 
} 

が、あなたはまた、使用してパスを抽出することができます。

$extractedPath = '!! Some/File/Path/Doc.txt' -split ' ' | select -Last 1 

または

$extractedPath = ('!! Some/File/Path/Doc.txt' -split ' ')[-1] 
関連する問題