如何让powershell“mkdir”命令与Linux的mkdir -p
命令完全相同?
在Linux下,mkdir -p
将创建嵌套目录,但前提是它们尚不存在。例如,假设您有一个您具有写权限的目录/foo
。 mkdir -p /foo/bar/baz
在现有/foo
下的栏内创建了bar和baz。您再次运行相同的命令,您将不会收到错误,但不会创建任何错误。
答案 0 :(得分:12)
您可以使用-ErrorAction SilentlyContinue
参数忽略PowerShell中的错误(您可以将其缩短为-ea 0
)。完整的PowerShell命令是
New-Item /foo/bar/baz -ItemType Directory -ea 0
您可以将此缩短为
md /foo/bar/baz -ea 0
(如果您愿意,也可以输入mkdir
而不是md
。)
请注意,PowerShell将在使用DirectoryInfo
(或New-Item -ItemType Directory
或md
别名时)输出它创建的mkdir
对象。如果您不想要任何输出,可以输入Out-Null
。
答案 1 :(得分:1)
New-Item -Path“c:\ some \ folder \ path”-ItemType Directory
答案 2 :(得分:1)
如何将mkdir
与-Force
一起使用?这似乎对我有用,它将从指定路径创建所有目录,并且如果目录已经存在也不会导致错误。
mkdir path/to/my/target/dir -force
结果:
PS > mkdir path/to/my/target/dir -force
Directory: C:\Users\Sam\path\to\my\target
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 25/09/2020 13:18 dir
# We can check that all directories have been created
PS > tree path
C:\USERS\SAM\PATH
└───to
└───my
└───target
└───dir
# Let's run again now that the directories already exist
PS > mkdir path/to/my/target/dir -force
Directory: C:\Users\Sam\path\to\my\target
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 25/09/2020 13:20 dir
# And check the result of the previous command
PS > $?
True
答案 3 :(得分:0)
相当于Unix的PowerShell
mkdir -p ...
是
$null = New-Item -Type Directory -Force ...
-Force
(类似于-p
)实现了所需状态逻辑,该逻辑可确保两件事:
它在目标目录路径中创建中间目录,这些目录可能还不存在按需(New-Item -Type Directory
,与Unix mkdir
不同,甚至默认情况下也是如此)。
如果目标目录已经存在,它成功。
一个重要的区别:除非发生错误:
mkdir -p
产生无输出。New-Item -Type Directory
输出表示目标目录的[System.IO.DirectoryInfo]
实例。因此,要模拟mkdir -p
的行为,必须将该输出丢弃,最好通过将其分配给$null
($null = New-Item ...
)注意事项:
在 Windows 上,mkdir
是New-Item
在类似 Unix 的平台上-在跨平台的 PowerShell [Core] v6 + 版本中-mkdir
不是 别名,而是使用平台本地的外部mkdir
实用程序。
因此,如果您的脚本需要跨平台,请明确使用New-Item
。
注意:如果您忽略 -Force
,而只是忽略错误 ,如Bill Stewart's answer(带有{ {1}}或-ErrorAction SilentlyContinue
),您会得到类似的行为,除了 输出行为会因情况而异:
如果目标目录已经存在,则不会产生 输出(因为发生的错误会被忽略),而如果目标目录是创建 ,则返回代表它的-ErrorAction Ignore
实例。
[System.IO.DirectoryInfo]
和Unix New-Item -Type Directory
之间的根本区别在于,只有前者默认根据需要创建 intermediate 目录 。< br />
mkdir
仅对mkdir
如此。