powershell相当于linux“mkdir -p”?

时间:2017-11-17 18:34:20

标签: powershell

如何让powershell“mkdir”命令与Linux的mkdir -p命令完全相同?

在Linux下,mkdir -p将创建嵌套目录,但前提是它们尚不存在。例如,假设您有一个您具有写权限的目录/foomkdir -p /foo/bar/baz在现有/foo下的栏内创建了bar和baz。您再次运行相同的命令,您将不会收到错误,但不会创建任何错误。

4 个答案:

答案 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 Directorymd别名时)输出它创建的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 上,mkdirNew-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如此。