Я пытаюсь объединить два значения с двумя ключами в различных HashTables.

Код

$caminho = @{
    Aplicacao = "C:\Users\marconi.barroso\Desktop\APP";
    jdk = "C:\Program Files\java\jdk1.8.0_172\bin"
}

$arquivo = @{
    log = "log.txt";
    apk = "lojasrede.apk"
}


if(Test-Path $caminho.Aplicacao\$arquivo.log) {
    Remove-Item $caminho.Aplicacao\$arquivo.log
}

Ошибка:

Test-Path: невозможно связать аргумент с параметром «Path», поскольку он имеет значение null. В строке: 1 символ: 11

3 ответа3

1

Я пытаюсь объединить два значения с двумя ключами в различных HashTables.

Вам не хватает обязательного параметра -Path . Вы также не объединяли два пути, что можно сделать с помощью Join-Path, что привело к тому, что вы пытались сделать. Отсутствующий параметр -Path в Test-Path был только половиной проблемы.

Test-Path (Join-Path -Path $caminho.jdk -ChildPath $arquivo.log)

Приведенная выше команда правильно вернула True для меня.

Тест-Path

Join-Path

1

Есть несколько способов,

if(Test-Path (Join-Path $caminho.Aplicacao $arquivo.log)) {
    Remove-Item (Join-Path $caminho.Aplicacao $arquivo.log)}
}

Сначала я бы использовал Join-Path и сохранил бы путь в переменной, так как он будет использоваться как минимум дважды.

1

Просто добавьте + "\" + между двумя переменными массива и заключите их в круглые скобки, например ($caminho.Aplicacao + "\" + $arquivo.log) . Знак + [плюс] объединит строку \ [backslash], заключенную в "" [двойные кавычки]. Так что просто поместите это (+ "\" +) прямо между двумя переменными, и ваша логика останется почти такой же и работает, как и ожидалось.


PowerShell

$caminho = @{
    Aplicacao = "C:\Users\marconi.barroso\Desktop\APP";
    jdk = "C:\Program Files\java\jdk1.8.0_172\bin"
}

$arquivo = @{
    log = "log.txt";
    apk = "lojasrede.apk"
}


if(Test-Path ($caminho.Aplicacao + "\" + $arquivo.log)) {
    Remove-Item ($caminho.Aplicacao + "\" + $arquivo.log)
}

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .