将值管道到New-Item以在PowerShell中创建目录

时间:2015-03-23 04:29:20

标签: powershell powershell-v4.0

我有一个目录C:\temp\test\,其中包含三个DLL,我称之为First.dll,Second.dll,Third.dll。我想创建以每个DLL命名的子目录。

这是我到目前为止所尝试的:

$dirName = "Tenth"
new-item $dirName -ItemType directory

有效。它创建了一个名为“第十”的子目录。

这也有效:

(get-childitem -file).BaseName | select $_

它返回:

First
Second
Third

我已检查该命令的输出类型,它告诉我“select $ _”的类型为System.String。

现在这个位不起作用:

(get-childitem -file).BaseName | new-item -Name $_ -ItemType directory

我重复了三次以下错误:

new-item : An item with the specified name C:\temp\test already exists.
At line:1 char:34
+ (get-childitem -file).BaseName | new-item -Name $_ -ItemType directory
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceExists: (C:\temp\test:String) [New-Item], IOException
    + FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand

我正在执行命令的当前文件夹是C:\temp\test\

我无法在互联网上找到任何类似的例子来告诉我哪里出错了。任何人都可以给我任何指示吗?欢呼声。

2 个答案:

答案 0 :(得分:2)

  

现在这个位不起作用:

     

(get-childitem -file).BaseName | new-item -Name $_ -ItemType directory

这样,它可以工作,不需要ForEach-Object

(dir -file).BaseName|ni -name{$_} -ItemType directory -WhatIf

答案 1 :(得分:1)

$_引用管道中的每个项目,因此您需要通过管道ForEach-Object让您的线路正常工作,如下所示:

(get-childitem -file).BaseName | ForEach-Object {new-item -Name $_ -ItemType directory}

这将在当前powershell目录中创建项目,如果要在其他位置创建文件夹,也可以指定-Path

(get-childitem -file).BaseName | ForEach-Object {new-item -Name $_ -Path C:\MyFolder -ItemType directory}