【问题标题】:How to compare if a folder exists and if it does not exist, create her如何比较一个文件夹是否存在,如果不存在,创建她
【发布时间】:2017-09-26 15:25:38
【问题描述】:

我有以下问题,我需要创建一个脚本来比较目录是否存在,如果不存在,则创建它。在 linux shell 中,我使用参数-F 来检查目录是否存在。如何在 PowerShell 中进行测试?

在 Linux 外壳中:

DIR=FOLDER

if [ -f $DIR ]
then
    echo "FOLDER EXIST";
else
    echo "FOLDER NOT EXIST";
    mkdir $DIR
fi

如何在 Windows PowerShell 中进行这种比较?

$DIRE = "C:\DIRETORIO"

if ( -e $DIRE ) {
    echo "Directory Exists"
} else {
    md DIRETORIO
}

【问题讨论】:

  • -e $DIRE -> Test-Path $DIRE
  • 感谢您的帮助!

标签: powershell scripting powershell-3.0 windows-scripting


【解决方案1】:

根据 cmets,Test-Path 是您应该用来检查文件或目录是否存在的 PowerShell cmdlet:

$DIRE = "C:\DIRETORIO"

if ( Test-Path $DIRE ) {
    echo "Directory Exists"
} else {
    md DIRETORIO
}

Test-Path cmdlet 确定路径的所有元素是否 存在。如果所有元素都存在,则返回 $True,如果存在则返回 $False 失踪。它还可以判断路径语法是否有效以及是否 路径通向容器或终端或叶元素。

【讨论】:

  • 嗨!我用这个!谢谢!
【解决方案2】:

您也可以使用带有force 参数的New-Item cmdlet,您甚至不必检查目录是否存在:

New-Item -Path C:\tmp\test\abc -ItemType Directory -Force

【讨论】:

  • -forced 时,已经存在的目录会发生什么?我通常不建议盲目地 -forceing 一个 cmdlet 来“做它的事情”,除非我特别想强制一个已知状态。
  • @JeffZeitlin 你是对的,也许我不应该首先推荐它,但 Ansgar 已经提供了正确的评论。只是想提出另一种可行的方法(即使目录已经存在)。
  • 如果文件夹已经存在,它无论如何都会执行命令而不影响它。如,它不会覆盖文件夹,因为它不需要。如果文件夹已经存在,它也不会影响文件夹的内容。
  • 上述答案中建议的命令相当于告诉 PowerShell 为我获取路径“C:\tmp\test\abc”的文件夹对象。如果它已经存在,那就太好了;如果没有,创建它,然后给我那个对象。我不在乎你是怎么做的,只是不要删除任何东西,让它发生。我在脚本中使用它,它是一种干净、安全的方法,可以确保路径存在而不会对现有文件或文件夹。这似乎正是 OP 的意图,即使这不是他们所要求的。
  • @TheMadTechnician 感谢您的澄清和反馈!
猜你喜欢
  • 2011-01-19
  • 1970-01-01
  • 2013-09-18
  • 2014-11-24
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
相关资源
最近更新 更多