我有一个文本文件,其中包含一组UNIX PATH格式的字符串。我需要从每个字符串中提取最后一个字符串,该字符串由'/'。
分隔/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 :(得分:1)
在PowerShell中你会这样做:
Get-Content foo.txt | Where {$_ -match '/'} | Foreach {$_.Substring($_.LastIndexOf('/')+1)}
管道的Where
阶段是过滤掉空行和否则不指定路径的行。
答案 1 :(得分:0)
如果工作,请尝试此操作
(get-content foo.txt) -replace '.*/'
说明:'。* /' :吃掉所有的字符,直到字符串和回溯中的最后一个位置,直到它找到第一个' /'
|a|b|/|c|/|d|
---------|-->
| <-
|<--