如何让powershell的“mkdir”命令完全像Linux的mkdir -p
命令一样工作?
在Linux下,mkdir -p
将创建嵌套目录,但前提是这些目录不存在。例如,假设您有一个目录/foo
,并且您对该目录具有写权限。mkdir -p /foo/bar/baz
将在现有/foo
下创建bar和bar中的baz。再次运行相同的命令时,不会出现错误,但不会创建任何内容。
如何让powershell的“mkdir”命令完全像Linux的mkdir -p
命令一样工作?
在Linux下,mkdir -p
将创建嵌套目录,但前提是这些目录不存在。例如,假设您有一个目录/foo
,并且您对该目录具有写权限。mkdir -p /foo/bar/baz
将在现有/foo
下创建bar和bar中的baz。再次运行相同的命令时,不会出现错误,但不会创建任何内容。
4条答案
按热度按时间soat7uwm1#
您可以使用
-ErrorAction SilentlyContinue
参数忽略PowerShell中的错误(您可以将其缩短为-ea 0
)。您可以将其缩短为
(You如果愿意,也可以键入
mkdir
而不是md
。)请注意,PowerShell将输出它在使用
New-Item -ItemType Directory
(或md
或mkdir
别名)时创建的DirectoryInfo
对象。如果不需要任何输出,可以通过管道传输到Out-Null
。flmtquvp2#
Unix的PowerShell等价物
mkdir -p ...
是
-Force
与-p
一样,实现了 * 所需状态 * 逻辑**,这确保了两件事:New-Item -Type Directory
与Unixmkdir
不同,甚至 * 在默认情况下 * 也是这样做的)。一个关键的区别是:除非发生错误:
mkdir -p
产生 * 无输出 *。New-Item -Type Directory
输出一个[System.IO.DirectoryInfo]
示例,表示目标目录。因此,要模拟mkdir -p
的行为,必须 * 丢弃 * 此输出,最好通过赋值给$null
($null = New-Item ...
)来完成。mkdir
是一个 * 内置 Package 函数 *,它将参数传递给New-Item
-Type Directory
mkdir
* 不是 * 内置命令,而是遵从平台原生外部mkdir
实用程序。New-Item
。注意:如果您 * 省略 *
-Force
并简单地 * 忽略错误*,如Bill Stewart's answer(使用-ErrorAction SilentlyContinue
或-ErrorAction Ignore
)中所示,您将获得类似的行为,* 除了输出行为将随情况而变化:[System.IO.DirectoryInfo]
示例。New-Item -Type Directory
和Unixmkdir
之间的一个根本区别是,只有前者在需要时 * 默认 * 创建 * 中间 * 目录。mkdir
仅对-p
执行此操作。xzv2uavs3#
tgabmvqs4#
在
-Force
中使用mkdir
怎么样?我觉得这很好用,它会从指定路径创建所有目录,如果目录已经存在,也不会出错。结果: