Powershell - 从txt中提取字符串,将其拆分,然后将其连接以进行存档

时间:2016-05-26 18:34:51

标签: string powershell split

我有一个应用程序,我从git status获取新的\ modified文件列表,然后我从该文件中获取不完整的字符串,将它们与根目录文件路径连接起来,然后将这些文件移动到存档。我有一半的工作,但我使用PowerShell的性质不提供错误报告,这个过程显然是错误的。这是我试图使用的代码。 (它经历了几次迭代,请原谅注释掉的部分)基本上我试图从txt文件中获取内容,然后替换?用\(由于某种原因创建txt的过程爱前进斜线...),然后在空格处分割该字符串。我感兴趣的字符串的唯一部分是最后一部分,我试图与已知的工作根目录连接,然后我试图将它们移动到存档位置。在你问之前,由于文件的性质,这是我们不愿意在git中跟踪的东西(它们是带有时间戳的测试输出,我们希望在每次测试运行的基础上保存它们,而不是在git中)我仍然相当新的PowerShell,并且长期以来一直在撞击这块岩石。

    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)获取split字符串的最后一个元素,并将其与$ repo_dir连接以形成一个完整的文件路径,然后移动Doc.txt到存档位置($ target_root)。

1 个答案:

答案 0 :(得分:1)

要在PowerShell中组合路径,您应该使用Join-Path cmdlet。要从字符串中提取路径,可以使用regex

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

Join-Path cmldet还会将所有正斜杠转换为反斜杠,因此无需替换它们: - )。

您的整个脚本可能如下所示:

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

如果您不想在代码中使用regex,也可以使用以下方式提取路径:

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

$extractedPath = ('!! Some/File/Path/Doc.txt' -split ' ')[-1]