If-else не выполняется в сценарии powershell - PullRequest
0 голосов
/ 21 мая 2018

В настоящее время я пытаюсь создать сценарий PowerShell, который выполняет те же функции, что и cd, но также проверяет папку .git (новый каталог - хранилище git), а затем, если true, впоследствии извлекает и выполняет git status.

В данный момент я пытаюсь выполнить отладку в PowerShell ISE, но в отладчике мой сценарий пропускается прямо через блоки внутри операторов if..else.Это синтаксическая ошибка, или if..else работает правильно?

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!"
    }
}

PS: я знаю, что длинный Where-Object канал ужасен (и, несомненно, не функционирует как есть), ноэто мой первый сценарий.Хотелось бы помочь с этим, но моя главная проблема - выполнение, пропускающее блоки кода if / else.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Просто используйте 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
    }
}
0 голосов
/ 21 мая 2018

Привет, у вас есть ошибка в канале 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>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...