在第7个反斜杠之前删除字符串中的所有值

时间:2015-06-02 06:28:37

标签: powershell

我在txt文件中有一个需要操作的路径,如:

C:\詹金斯\自动化\布拉赫\富\酒吧\ 646433 \架构\测试\ 473289_12321.ps1 C:\詹金斯\自动化\布拉赫\富\酒吧\ 2112 \架构\ QA \ 473289_123211.ps1

我想在第7个反斜杠之前替换所有内容,然后用C:\ Question替换它。我在Powershell做了类似的事情:

(Get-Content $FullEnvSQLFilePath) |  #get the content
Foreach-Object {$_ -replace [Regex]::Escape($StringToReplace), "$StringReplaceValue"} | #look for the string and replace

当我知道要查找的确切措辞时,这很好。我们现在不知道,但我们希望在第7个反斜杠之前删除所有内容并将其替换为值。逆序也很好。通过子串执行此操作,我无法在Powershell中获得太多运气。感谢。

2 个答案:

答案 0 :(得分:2)

一个选项:

$text = 
'C:\Jenkins\Automation\Blah\Foo\Bar\646433\Schema\test\473289_12321.ps1',
'C:\Jenkins\Automation\Blah\Foo\Bar\2112\Schema\QA\473289_123211.ps1'

$text | foreach {'C:\Question\{0}' -f $_.split('\',8)[-1]}
C:\Question\Schema\test\473289_12321.ps1
C:\Question\Schema\QA\473289_123211.ps1

答案 1 :(得分:1)

对于以反斜杠结尾的捕获组,此([^\\]*\\){7}正则表达式会查找7次并替换它。

更新.:\\([^\\]*\\){6}正则表达式查找的字符串看起来像从任何根驱动器.:\开始的路径,然后是基于您的注释以反斜杠结尾的捕获组的6倍

$text = @"
C:\Jenkins\Automation\Blah\Foo\Bar\646433\Schema\test\473289_12321.ps1
C:\Jenkins\Automation\Blah\Foo\Bar\2112\Schema\QA\473289_123211.ps1
PRINT C:\Jenkins\Automation\Blah\Foo\Baz\2112\Schema\QA\473289_123212.ps1
C:\Jenkins\Automation\Blah\Foo\quux\2112\Schema\QA\473289_123213.ps1
"@
#depending on how you get the text (single string or array)
#$text.Split("`n") | % { $_ -Replace '.:\\([^\\]*\\){6}','C:\Example\' }
$text -Replace ".:\\([^\\`n]*\\){6}","C:\Example\"

<强>结果:

C:\Example\Schema\test\473289_12321.ps1
C:\Example\Schema\QA\473289_123211.ps1
PRINT C:\Example\Schema\QA\473289_123212.ps1
C:\Example\Schema\QA\473289_123213.ps1