我经常想做类似的事情:
$foo=ls foo.txt|select FullName
$bar=$foo.split("\\"); # or replace or some such
但如果我现在看看栏中的字符串,他们看起来像这样:
@{FullName=C:\path\to\foo.txt}
因为我知道装饰有多长,我可以手动获取子串。但这看起来很糟糕 - 是否有办法将路径部分作为字符串?
编辑:根据一些问题说明另一个类似的问题,如果我这样做:
$foo -replace("\\","/")
我明白了:
@{FullName=C:/src/tss/THSS-Deployment-Config/foo.txt}
我正在对这些文件名进行大量操作,以便在不同的CM存储库之间进行迁移。我在想'如果我能把整个路径变成一个字符串'......
这是我第一次认真进入PS。所以也许我的心态是错的。
答案 0 :(得分:4)
一些快速方法,全部使用Split-Path
cmdlet,非常适合:
$foo= ls foo.txt | select FullName
$bar = Split-Path $foo.fullname
或者:
$foo= ls foo.txt | select -ExpandProperty FullName
$bar = Split-Path $foo
甚至更短:
$bar = Split-Path (gci foo.txt).fullname
答案 1 :(得分:0)
@ arco444给了我遗失的一块。要获得文件名为字符串的完整路径,我能想到的最简单的事情是:
$bar=(Split-Path $foo.FullName) +"\"+ (Split-Path $foo -leaf)
我不确定是否有更简单的方法将整个路径组合成一个字符串。