我应该在目录字符串中使用/或\吗?

时间:2016-04-13 08:16:04

标签: powershell

我有这个脚本:

$appArray | foreach {
    $o = $_;
    Get-ChildItem .\app\$o\partials -Recurse | 
        ForEach-Object {
            $i = $_;
            Write-Host "app/$o/partials/$i";
            Write-S3Object `
                -BucketName "staging" `
                -Key  "app/$o/partials/$i" `
                -File "app/$o/partials/$i" `
                -HeaderCollection @{"Cache-Control" = "public,max-age=3600"}
        }
}

该脚本位于app目录下面的目录中,所以我希望在Get-ChildItem上升到一个目录时我希望" app /..."从一个目录开始。

我应该使用/还是\,如何在此目录中使用此命令?

3 个答案:

答案 0 :(得分:3)

我使用/。但要获取父目录,您应该考虑使用GetParent

[System.IO.Directory]::GetParent('YOUR_PATH')

Split-Path cmdlet:

Get-Item 'YOUR_PATH' | Split-Path -parent

或访问该属性:

 (Get-Item 'YOUR_PATH').parent.fullname

这里是您采用的代码。注意:我还使用Join-Path cmdlet组合路径并确定第一行中的脚本目录(否则,只有当前位置是脚本目录时,您的脚本才会起作用):

$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$scriptParentPath = $scriptPath | Split-Path -Parent

$appArray | foreach {
    $o = $_;
    $currentPath = Join-Path (Join-Path $scriptParentPath $o) 'partials'
    Get-ChildItem $currentPath -Recurse | 
        ForEach-Object {
            ...
        }
}

答案 1 :(得分:1)

只是澄清一下,自2003年左右以来,/和\是有效的路径分隔符(即使在CMD.exe中)

是否有理由选择foreach-object而非使用

foreach ($o in $appArray) {
    foreach ($i in (Get-ChildItem .\app\$o\partials -Recurse)) {
        <your code>
    }
}

我问在pipline中你无法使用continuebreak或&#39;退出&#39;因为即使在任何嵌套循环中它也会影响管道而不是循环。

最后,要回答上面的评论,您可以使用...但是您必须自己构建路径,而不是使用split-path -parentjoin-path 。如果您有路径或[System.IO.DirectoryInfo]或[System.IO.FileInfo](由Get-ChildItem返回),为什么不简化您的代码并使用内置命令。

foreach ($folder in $appArray) {
    foreach ($item in (Get-ChildItem .\app\$folder\partials -Recurse)) {
        $itemPath = $item.Fullname -replace "$PWD\","" 
        Write-Host $itemPath
        Write-S3Object `
            -BucketName "staging" `
            -Key $itemPath
            -File $ItemPath
            -HeaderCollection @{"Cache-Control" = "public,max-age=3600"}
    }
}

答案 2 :(得分:1)

您应该始终使用/.

Linux工具有时需要它,当Linux上的Posh变为现实时,脚本最终将更具可移植性。