如何在 powershell 中创建多个文件夹

如何在 powershell 中创建多个文件夹

在 cmd 中可以使用mkdir /data/rs1 /data/rs2 /data/rs3如下命令: cmd 示例

一切都正确:

文件夹示例

但是在powershell中如何实现呢?

我正在尝试使用引号,例如: 电源外壳

带引号后我只得到一个文件夹,并且在 powershell 中遇到问题: 文件夹示例

mkdir : Could not find part of the path "rs3".
строка:1 знак:1
+ mkdir "/data/rs1 /data/rs2 /data/rs3"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\data\rs1 \data\rs2 \data\rs3:String) [New-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : CreateDirectoryIOError,Microsoft.PowerShell.Commands.NewItemCommand

没有引号也会出现问题并且没有任何文件夹文件夹示例电源外壳

mkdir : Can not find a positional parameter that takes an argument"/data/rs2".
строка:1 знак:1
+ mkdir /data/rs1 /data/rs2 /data/rs3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [mkdir], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,mkdir

为了避免出现这些问题,我可以不带空格书写:

PS C:\data> mkdir /data/rs1/data/rs2/data/rs3

但它将是一个rs1包含以下内容的rs2文件夹rs3

C:\data\rs1\data\rs2\data\rs3

我感谢任何帮助。

答案1

mkdir可以一次创建多个目录,因此不需要foreach。您只需用逗号分隔它们:

这里我在一个目录中创建了3个文件夹(Hello,Hello2,Hello3)

PS C:\install> mkdir Hello,Hello2,Hello3


    Verzeichnis: C:\install


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:39                Hello
d-----       09.07.2018     10:39                Hello2
d-----       09.07.2018     10:39                Hello3

这里我在一个目录中的单独子文件夹中创建了 3 个文件夹:

PS C:\install> mkdir .\xy3\Hello, .\yz3\Hello2, .\tr3\Hello3


    Verzeichnis: C:\install\xy3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:42                Hello


    Verzeichnis: C:\install\yz3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:42                Hello2


    Verzeichnis: C:\install\tr3


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       09.07.2018     10:42                Hello3

答案2

在 powershell 中有很多方法可以做到这一点

1..3 | ForEach {MD ".\data\rs$_"}

或者

'RS1','RS2','RS3' | % {New-Item -Name ".\data\$_" -ItemType 'Directory'}

或者

for ($i=1;$i -le 3;$i++){MD ".\data\rs$i"}

或者

MD .\data
Pushd .\data
$Folder = @('RS1','RS2','RS3')
Md $Folder

其中md是 的别名New-Item
%ForEach的别名ForEach-Object

答案3

您可以在 PowerShell 中使用 foreach 来完成此操作

ForEach ($Dir in ("Dir1", "Dir2", "Dir3", "Dir4"))
    {
        New-Item -ItemType Directory -Path [PATH]\$Dir
    } 

阅读更多内容PowerShell 中的 ForEach

答案4

首先,请不要将屏幕截图用于可以轻松复制粘贴为文本的内容。

您的屏幕截图中的命令是这样的:

mkdir \data\rs1 \data\rs2 \data\rs3

在这个例子中,如果您在正确的驱动器上,这在脚本中也能正常工作C:

该命令mkdir /data/rs1 /data/rs2 /data/rs3不是一回事,因为正如您所见,路径参数使用/作为路径分隔符,这在 Windows 中不起作用。

在路径列表上加上双引号也无济于事。这样,双引号表达式将被视为一条路径,而不是 3 条路径。

简而言之,就像mkdir \data\rs1 \data\rs2 \data\rs3在您的命令示例中工作一样,它在批处理脚本中的工作方式完全相同。

相关内容