在 cmd 中可以使用mkdir /data/rs1 /data/rs2 /data/rs3
如下命令:
一切都正确:
但是在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
在您的命令示例中工作一样,它在批处理脚本中的工作方式完全相同。