2014-09-23 69 views
0

我有一个文本文件,其中包含一组UNIXPATH格式的字符串。我需要提取每个由'/'分隔的最后一个字符串。从文件中提取带分隔符'/'的最后一个字符串

/Public/Home/Call/Reports/Weekly Template/C555 Weekly Report - Monday 
/Public/Home/Call/Reports/Weekly Template/C567 Weekly Report - Monday 
/Public/Home/Call/Reports/Weekly Template/C555 Weekly Report - Tuesday 
/Public/Home/Claim Repo/Reports/Weekly Set/@Weekly Report - $100 for Monday 
/Public/Home/Claim Report/Reports/Weekly Not Set/ Weekly Report - Monday 

我需要在Windows机器上运行这些,因此需要PowerShell或批处理。 我需要帮助的脚本,可以让空格和特殊字符也工作了,并且可以读取.TXT文件和输出以下格式的完整字符串:

/Public/Home/Call/Reports/Weekly Template  C555 Weekly Report - Monday 
/Public/Home/Call/Reports/Weekly Template  C567 Weekly Report - Monday 
/Public/Home/Call/Reports/Weekly Template  C555 Weekly Report - Tuesday 
/Public/Home/Claim Repo/Reports/Weekly Set  @Weekly Report - $100 for Monday 
/Public/Home/Claim Report/Reports/Weekly Not Set  Weekly Report - Monday 

有一个解决方案,我在另一个答案中发现:

http://stackoverflow.com/questions/20004597/extracting-string-after-last-instance-of-delimiter-in-a-batch-file 

它的代码被给定为:

for %%a in (%param:\= %) do set lastDir=%%a 
:nextParam 
    set "param=%~1" 
    if not defined param goto endParams 
    for %%a in (%param:\= %) do set lastDir=%%a 
    echo Last dir: %lastDir% 
    shift 
goto nextParam 
:endParams 

或者,在一个简单的方法(不带空格限制):

:nextParam 
    if "%~1" equ "" goto endParams 
    echo Last dir: %~N1 
    shift 
goto nextParam 
:endParams 

但是,我希望迎合字符串中的空格和特殊字符,上面没有这样做。

回答

0

如果工作

(get-content foo.txt) -replace '.*/' 

说明试试这个:“* /。”:吃的所有字符,直到字符串的最后位置和回溯,直到它找到的第一个‘/’

|a|b|/|c|/|d| 
---------|--> 
     | <- 
     |<-- 
+0

'-match'返回布尔值True或False - 不是字符串。 – 2014-09-23 04:24:18

+0

@KeithHill:代码没有经过测试,但你可以避免在这里使用匹配运算符 – 2014-09-23 04:31:28

+0

@walidtoumi:我怎样得到字符串的第一部分呢?我可以将它解压缩到单独的文件中吗? – gagneet 2014-09-23 08:18:08

1

在PowerShell中,你会做到这一点,像这样:

Get-Content foo.txt | Where {$_ -match '/'} | Foreach {$_.Substring($_.LastIndexOf('/')+1)} 

管道的Where阶段是过滤掉空行,并线,否则不指定路径。

+0

怎么办我得到最初的字符串?我想要的格式为初始字符串最终字符串... – gagneet 2014-09-23 05:03:03

+1

初始字符串位于Foreach脚本块中,并由'$ _'表示。 – 2014-09-23 14:27:32

相关问题