从单个参数解析文件名和目录

时间:2016-05-18 21:42:55

标签: powershell

我正在编写一个脚本,该脚本将创建一个XML文档,以便用于进一步的自动化。除其他事项外,dropDirfileName应该是参数。但由于这些都是必需的,因此文件将始终位于dropDir

我想知道是否可以将这两个参数合并为一个参数,然后从单个字符串中解析出文件?

因此,例如,用户将调用脚本:

.\iAmAScript.ps1 -path C:\prodfiles\settings.xml

在iAmAScript内部,逻辑上会采取以下行动:

If (![System.IO.File]::Exists($path)){
    New-Item $path -type file
    $dropLoc = $path.<some method returning C:\prodfiles\>
    $fileName = $path.<some method returning settings.xml>
}

我只是不太确定如何在Powershell的上下文中执行此操作,这是尝试找出在Powershell中使用LastIndexOf方法截断左边所有内容的方法的最佳方法最后一个\?

1 个答案:

答案 0 :(得分:2)

您可以使用Split-Path来获取这些组件:

$file = $path | Split-Path -Leaf
$dir = $path | Split-Path -Parent

.NET方法如下:

$file = [System.IO.Path]::GetFileName($path)
$dir = [System.IO.Path]::GetDirectoryName($path)

您还可以获取该项目并使用其属性:

$item = Get-Item -Path $path
$item.Name           # the file
$item.DirectoryName  #the directory

此对象可以传递给接受文件参数的大多数cmdlet,并且它会公开其他方法。要做到这一点,文件必须首先存在,所以你必须创建它然后获取项目,但这可能会在你的脚本中稍后有用。