【问题标题】:Using "starts with" in powershell script instead of contains?在 powershell 脚本中使用“开始于”而不是包含?
【发布时间】:2017-01-04 22:38:12
【问题描述】:

在我当前的 powershell 脚本中,我有带有值的哈希表。我正在使用 这个语法

$x = $f.contains("$k")

但我最近发现这种方法存在问题我想知道 powershell 是否有一些“以”开头或相关的东西,它会在哈希表中搜索“以”而不是 contains

哈希表示例:

"bio.txt" = "server1\datafiles\bio";
etc.......

编辑来自 cmets 的示例

foreach ($key in $filehash.keys) { 
    $path = $filehash.get_Item($key)
    $filecount = 0
    foreach ($file in $FileArray) { 
        if ($file.LastWriteTime -lt($(GetDate).adddays(-1))) { 
            [string] $k = $key.ToLower()
            [string] $f = $file.name.ToLower() 
            if ($x = $f.contains("$k")) { } 
        }
    }
}

【问题讨论】:

  • 您是在搜索键还是值?
  • 导致这个问题的例子可以说我有
  • "bio.txt" = "server1\datafiles\bio";
  • "bio.csv" = "server1\datafiles\bio\csv";
  • 使用“Shift + Return”换行

标签: powershell hashtable


【解决方案1】:

尝试使用-like 来检查字符串是否以yourvalue 开头。我在 cmets 中重写了您的示例以使用它:

$filehash.GetEnumerator() | foreach {
    #$_ is now current object from hashtable(like foreach)
    #$_.key is key and $_.value is path
    $filecount = 0
    foreach ($file in $FileArray) {
        if ( ($file.LastWriteTime -lt $((Get-Date).AddDays(-1))) -and ($file.name -like "$($_.Key)*") ) {
            #process file

        }
    }
}

【讨论】:

  • foreach ($filehash.keys 中的$key) { $path = $filehash.get_Item($key) $filecount = 0 foreach ($FileArray 中的$file) { if ($file.LastWriteTime - lt($(GetDate).adddays(-1))) { [string] $k = $key.ToLower() [string] $f = $file.name.ToLower() if ($x = $f.contains ("$k")) { }
  • 不使用包含,我想知道是否可以将其更改为开头或类似的内容
  • 你不能用:if ($f -like "$k*") { #process if filename starts with $k } 吗?查看更新的答案
  • if ($x = $f.StartsWith("$k")) 这就是我要找的...谢谢大家:)
猜你喜欢
  • 2016-04-25
  • 2012-04-14
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2018-11-02
  • 2022-01-24
  • 2021-07-22
  • 1970-01-01
相关资源
最近更新 更多