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

Sco*_*ker 2 powershell

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

new-item "c:\newdir" -itemtype directory
Run Code Online (Sandbox Code Playgroud)

这也有效:

$arr = "one", "two"
$arr | new-item -name {$_} -itemtype directory
Run Code Online (Sandbox Code Playgroud)

产生两个新文件夹:c:\onec:\two(假设当前目录是 c:)。

这会失败并显示错误“不支持给定路径的格式”。

$arr = "c:\one", "c:\two"
$arr | new-item -name {$_} -itemtype directory
Run Code Online (Sandbox Code Playgroud)

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

mkl*_*nt0 5

tl;博士


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

所以,

new-item "c:\newdir" -itemtype directory
Run Code Online (Sandbox Code Playgroud)

是相同的:

new-item -Path "c:\newdir" -itemtype directory
Run Code Online (Sandbox Code Playgroud)

New-Item -?会告诉你-Path接受一个字符串数组

$arr = 'c:\one', 'c:\two'
# Positional use of $arr implies -Path
New-Item $arr -ItemType Directory
Run Code Online (Sandbox Code Playgroud)

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

New-Item 'c:\one', 'c:\two' -ItemType Directory
Run Code Online (Sandbox Code Playgroud)

几个New-Item的参数接受管道输入,并且是唯一一个接受输入的值(输入对象不变化)是-Value,在这里没有帮助。

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

要确定哪些参数接受管道输入,请运行Get-Help -full New-Item并搜索 string 的实例 Accept pipeline input? True。此方法适用于所有 cmdlet。

因此,为了绑定到 parameter -Path,输入对象必须具有以下.Path属性:

$arr = [pscustomobject] @{ Path = 'c:\one' }, [pscustomobject] @{ Path = 'c:\two' }
$arr | New-Item -ItemType Directory
Run Code Online (Sandbox Code Playgroud)

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

$arr = 'c:\one', 'c:\two'
$arr | New-Item -Path { $_ } -ItemType Directory
Run Code Online (Sandbox Code Playgroud)

自动变量$_反映了手头的管道对象,在这种情况下依次是输入字符串

可以在此处找到对这种方法的部分过时的解释;如今,该方法仅适用于设计为原则上接受管道输入的参数。

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


至于你尝试什么

-Name只接受目录;只-Path接受路径

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

$arr = 'c:\one', 'c:\two'
$arr | New-Item -Path { $_ } -ItemType Directory
Run Code Online (Sandbox Code Playgroud)

因为输入路径包含字符,如:\不能是一个目录/文件的一部分名称