在PowerShell New-Item命令的路径中使用驱动器号

时间:2017-05-31 20:55:28

标签: powershell

这会按预期创建一个新目录:

new-item "c:\newdir" -itemtype directory

这也有效:

$arr = "one", "two"
$arr | new-item -name {$_} -itemtype directory

导致两个新文件夹:c:\onec:\two(假设当前目录为c :)。

此操作失败,并显示错误“不支持给定路径的格式。”

$arr = "c:\one", "c:\two"
$arr | new-item -name {$_} -itemtype directory

如何使用路径中的驱动器号进行此操作?

3 个答案:

答案 0 :(得分:3)

<强> TL;博士

  • 最好将路径 array 直接传递给(隐含的)-Path参数:

    $arr = 'c:\one', 'c:\two'
    # Positional use of $arr implies -Path
    New-Item $arr -ItemType Directory
    
  • 或者,通过管道和 script-block参数值:

    $arr = 'c:\one', 'c:\two'
    $arr | New-Item -Path { $_ } -ItemType Directory
    
  • 使用目录 names 并分别指定的共享父路径

    $arr = 'one', 'two'
    $arr | New-Item -Name { $_ } -ItemType Directory -Path C:\
    

如果未指定参数名称,New-Item会将第一个位置参数绑定到-Path参数。

因此,

new-item "c:\newdir" -itemtype directory

与:

相同
new-item -Path "c:\newdir" -itemtype directory

New-Item -?会告诉您-Path接受数组字符串:

New-Item [-Path] <String[]> ...

因此,您甚至不需要管道,只需直接传递路径数组

New-Item 'c:\one', 'c:\two' -ItemType Directory

New-Item个参数的几个接受管道输入,唯一一个按值接受输入(输入对象原样)的参数是{{ 1}},但没有 在这里帮忙。

其余的管道绑定参数需要通过与参数名称匹配的属性名称绑定

要确定哪些参数接受管道输入,请运行-Value并搜索字符串Get-Help -full New-Item的实例。此方法适用于所有cmdlet。

因此,为了绑定到参数Accept pipeline input? True,输入对象必须具有-Path属性:

.Path

但是,鉴于任何管道绑定参数都可以将脚本块作为为每个输入对象计算的参数值,这可以简化为:

$arr = [pscustomobject] @{ Path = 'c:\one' }, [pscustomobject] @{ Path = 'c:\two' }
$arr | New-Item -ItemType Directory

自动变量$arr = 'c:\one', 'c:\two' $arr | New-Item -Path { $_ } -ItemType Directory 反映了手头的管道对象,在这种情况下依次是输入字符串

A - 部分过时 - 可以找到这种方法的解释here;如今,这种方法很有效 仅使用设计用于原则上管道输入的参数。 功能

顶部带有$_-Name { $_ }的命令 - 与共享父路径分开指定名称 - 的工作方式类似。

至于您尝试的内容

-Path C:\仅接受目录名称;只有-Name接受路径

尝试将输入路径绑定到-Path会导致错误消息:

-Name

因为输入路径包含The given path's format is not supported. :等字符,这些字符不能是目录/文件名称的一部分。

答案 1 :(得分:2)

您需要将-name与-path结合使用才能使新项目正常工作。

New-Item -Name "Name" -itemType directory -path "C:\"

您可以创建一个哈希表条目数组,而不是将路径作为一个条目,将名称作为另一个条目。或者,如果路径总是相同,则将其作为另一个变量传递。

答案 2 :(得分:0)

当我们这样做时:

new-item "c:\newdir" -itemtype directory

“C:\ newdir”会自动解析为New-Item的Path参数,因为它位于第1位。这使它工作

当我们这样做时:

$arr | new-item -name {$_} -itemtype directory

$ arr的每个值都按值输入管道,该值解析为New-Item的Value参数。 由于它具有值和目录ItemType,因此它会抛出拟合。

New-Item的帮助文件显示Path是一个字符串[]。这意味着你可以这样做:

$arr = "c:\one", "c:\two"
new-item -Path $Arr -itemtype directory

它将为$ Arr。

中的所有值创建目录