【问题标题】:Check for File in multiple directories with an IF statement Powershell使用 IF 语句 Powershell 检查多个目录中的文件
【发布时间】:2016-11-28 16:58:55
【问题描述】:

我在 powershell 中遇到了一些问题。我希望能够让 powershell 命令搜索多个目录。 名称为“$VM_DISK=VM_DISK.vhdx”之类的变量,并让 powershell 在该庄园中搜索,以便如果该文件存在于诸如 C:\VM_DISK\ 之类的文件夹中,它将退出脚本。 我已经尝试过“Get-Childitem”,但是当我将变量放入其中时它似乎不起作用。这是一个例子:

    $VM_DISK= "Example.vhdx"

    $search=Get-ChildItem -Path C:\VM_DISK\* -Filter $VM_DISK -Recurse 

    if ($search -eq $VM_DISK) {write-host "Goodbye!" exit}  else {write-host "Continue"}

我似乎无法弄清楚为什么这不起作用,希望有人能弄清楚。

【问题讨论】:

  • if($VM_DISK){...} - 如果Get-ChildItem 没有返回任何内容,则$VM_DISK 为空,并将评估为$false
  • @MathiasR.Jessen 奇怪的是,当我在 Get-Childitem 前面放置一个变量时,它不再起作用,当我删除它时,我得到一个响应,即该文件存在于位置和所有。
  • 抱歉,我的意思是if($search){...} - $search 将包含来自Get-ChildItem 的结果(或什么都没有)
  • 你完全正确,我确实得到了“很好”的响应,但我怎样才能让 if 语句等于 $VM_DISK 变量?像“ if($search -eq $VM_DISk) {..}

标签: powershell directory get-childitem


【解决方案1】:

您需要更改您的 if 声明。

if ($search.Name -contains $VM_Disk)

通过这种方式,您可以将名称数组(这是您想要的,对象名称,而不是对象)与特定对象的名称(基本上是 string)进行比较。
在你的情况下,这没有什么意义,tbh。因为$search 将始终包含$VM_Disk,或者如果没有找到则为空。

所以正确的测试方法是if ($search)(就像 Mathias 建议的那样)。这将测试是否有任何东西被退回。其中,基本上等于您正在尝试做的事情。

【讨论】:

  • 非常感谢,真的。这是我需要的解决方案,我只是有点卡住了,找不到合适的条款,但在你的帮助下,我终于可以继续我的项目了。
  • 您还知道如何检查多个文件吗?就像在我想搜索文件 VM_NAME.vhdx 和 VM_NAME 2.vhdx?
  • 您希望他们两个都在$search 或其中任何一个?
  • 我希望它拥有它,所以如果两个文件都存在,它会退出脚本我尝试使用 include 函数而不是 filter 函数将它放在搜索中。之后,我做了一个 if 语句,例如 if ($search.name,search2.name -contains $VM_NAME,$VM_NAME 2 ) {exit}
  • if ($search.name -contains $VM_NAME -and $search.name -contains $VM_NAME2)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2013-08-26
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多