如果 - 否则不在powershell脚本中执行

时间:2018-05-20 21:17:08

标签: powershell scripting

我目前正在尝试创建一个执行与cd相同功能的PowerShell脚本,但也会检查.git文件夹(新目录是一个git存储库)然后如果为true,则后续获取并执行{{ 1}}。

我正在尝试在PowerShell ISE中进行调试,但在调试器中,我的脚本直接跳过git status语句内的块。这是语法错误,还是if..else正常工作?

if..else

P.S:我知道长function gd { #set parameters taken from program (only file location) Param( [Parameter(Position=0)] [String]$location ) #get current directory location [String]$Cl = $(Get-Location) Set-Location $location [String]$Nl = $(Get-Location) if ($Cl -eq $Nl) { return } else { Get-ChildItem -Hidden | Where-Object { $_.Name -eq ".git" } | Write-Output "Eureka!"; git fetch; git status; return Write-Output "No .git found here!" } } 管道很糟糕(并且无法理解为无功能),但这是我的第一个脚本。欢迎任何帮助,但我的主要问题是跳过if / else代码块的执行。

2 个答案:

答案 0 :(得分:1)

嗨,你的Where-Object管道中有一个错误,它应该是另一个if块。看到我修改过的代码,它对我有用。

function gd {
    #set parameters taken from program (only file location)
    Param(
        [Parameter(Position=0)]
        [String]$location
    )
    #get current directory location
    [String]$Cl = $(Get-Location)

    Set-Location $location
    $location
    [String]$Nl = $(Get-Location)

    if ($Cl -eq $Nl) {
    return
    } else {
        if(Get-ChildItem -Hidden | Where-Object {
            $_.Name -eq ".git"
        } ) 
    {
        Write-Output "Eureka!"
        git fetch;
        git status;
        }
        else{
        Write-Output "No .git found here!"
    }
    }
}
gd D:\<git-folder>

希望这有帮助。

答案 1 :(得分:1)

只需使用Test-Path检查.git子文件夹即可。我还建议在调用git fetch之前检查存储库是否实际被克隆。

function Set-LocationGit {
    [CmdletBinding()]
    Param(
        [Parameter(Position=0, Mandatory=$true)]
        [String]$Location
    )

    if ($Location -eq $PWD.Path) {
        return  # path not changed => nothing to do
    }

    Set-Location $Location

    if (Test-Path -LiteralPath '.\.git' -Type Container) {
        if (git config --get 'remote.origin.url') { git fetch }
        git status
    }
}