我正在尝试删除路径中的路径,以获取变量中文件夹的名称,而无需重新输入。
我希望将var中的TaskName称为$ string
我用-replace删除了部分内容。
路径:C:\ 2017 \ 02 \ 21 \ TaskName \ Step \ log
这就是我已经做过的事情:
$string = "C:\2017\02\21\TaskName\Step\log"
$string = $string -replace "\\Step\\log$"
我尝试过类似的事情:
$string = $string -replace "C:\\*\\*\\*\\$"
但它不起作用
答案 0 :(得分:1)
您可以使用Split-Path
从路径名中删除最后一个组件。
例如
Split-Path 'C:\Projects\Current\TheProject`
返回C:\Projects\Current
。
使用-leaf
参数返回最后一个组件:
Split-Path -leaf 'C:\Projects\Current\TheProject`
返回TheProject
。
你可以把它们连在一起
'C:\Projects\Current\TheSolution\ProjectOne' | Split-Path | Split-Path | Split-Path -leaf
获取Current
。
答案 1 :(得分:0)
如果路径确实存在,则可以执行
(Get-Item "C:\2017\02\21\TaskName\Step\log").Parent.Parent.Name
答案 2 :(得分:0)
您的代码无效,因为$
从头到尾查找搜索字符串。此外,*
表示前面的0个或多个字符。
因此,您的模式"C:\\*\\*\\*\\$"
实际上是在 C:\\\\
的末尾寻找某些,例如$string
。
在第二次替换中,您需要将参数传递为:
$string = $string -replace "^C:\\.+\\"
此模式将从头开始(^
),C:\
后跟任意数量的字符(.+
),以\
结尾。
有关详细信息,请在powershell中执行以下命令
get-help about_regular_expressions