当前位置: 首页 > 知识库问答 >
问题:

在Powershell中,让join-path使用$null和空字符串

海翔宇
2023-03-14

Powershell 5说“no way Jose”,不能用空字符串或空字符串连接path。我说为什么不呢?有没有办法让join-path更“灵活”,而无需添加更多if-else块?

    $its_in_the_path = $true
    #$its_in_the_path = $false

    if ($its_in_the_path) {
        $mydir = ""
    }
    else {
        $mydir "C:\tool\path  
    }

    $tool = join-path $mydir "runit.exe"
Cannot bind argument to parameter 'Path' because it is an empty string.
daskljdhgfaklsuhfalhfluwherfluqwhrluq2345214723452345h2kjrwefqy345
At + ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [frunsim], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,frunsim

共有2个答案

凌朗
2023-03-14

圣地亚哥·斯奎尔宗的有用答案向您展示了如何解决无法通过直接使用 .NET API 将$null“” 传递到 Join-Path 的问题。

另一种方法是完全绕过连接路径[系统.IO.路径]::组合() 并手动加入路径组件:

$tool = $mydir + ('', '\')[[bool] $mydir] + "runit.exe"

上面所依赖的事实是,当被强制为布尔值(< code>[bool])时,< code>$null和< code>''(空字符串)都返回< code>$false,而任何非空字符串都返回< code>$true。反过来,当用作数组索引时(< code>[...]),< code>$false映射到索引< code>0,而< code>$true映射到< code>1 -有关PowerShell到布尔转换规则的总结,请参见本答案的底部部分。

在 PowerShell(核心)7 中,您可以使用三元条件运算符 ?:更清楚地表达此意图,前提是$null“” 也隐式转换为布尔上下文中的$false

$tool = $mydir + ($mydir ? '\' : '') + "runit.exe"
郗缪文
2023-03-14

连接路径将不允许$nullvalue或[string]::空。您可以使用<code>路径。为此,组合方法

PS \> [System.IO.Path]::Combine($null, "runit.exe")
runit.exe

PS \> [System.IO.Path]::Combine('C:\', 'Documents', "runit.exe")
C:\Documents\runit.exe
 类似资料:
  • 问题内容: 在Java 8中,我有一些String值,并且我想以逗号分隔的有效值列表结尾。如果String为 null或为空, 我想忽略它。我知道这似乎很普遍,很像这个老问题 ; 但是,该讨论并未解决null和空格(我也不喜欢公认的答案)。 我看过Java 8 StringJoiner,公用StringUtils(联接)和可信赖的番石榴(Joiner),但是似乎没有一个完整的解决方案。愿景: 会导

  • 本文向大家介绍区分MySQL中的空值(null)和空字符(''),包括了区分MySQL中的空值(null)和空字符('')的使用技巧和注意事项,需要的朋友参考一下 日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到Mysql中的NULL和空字符。 空字符('')和空值(null)表面上看都是空,其实存在一些差异: 定义: 空值(NULL)的长度是NULL,不确定占用了多少存储空间,但是占

  • 在PowerShell中,是否有一个内置的类函数来检查字符串是空还是空? 到目前为止我还找不到它,如果有一个内置的方式,我不想为此写一个函数。

  • 我有以下字符串输出: 但是我想在Java中有如下格式的输出 请帮帮我。 我正在将对象转换为json数据。请参见以下代码 我想将此应用于使用java 7的jsonString变量,就像不使用java 8一样

  • 我希望在给定空字符串时使用默认值。我希望有更优雅的东西,然后使用if语句检查<code>$Var 下面是我试图完成的一个片段。给定一个空字符串,我希望它打印“Var: DEFAULT”。

  • 像这样的空字符串isnull()找不到空字符串