使用-Like运算符

时间:2014-09-26 14:03:33

标签: powershell

我需要修改此脚本,如果我们找到的目录有" 1970"以它的名字命名。我试图使用-Like运算符来完成此操作,但我无法正常工作。我不知道这个问题是我对运营商的使用,也可能是支票的放置,或其他完全不同。

一些注意事项:我已经删除了电子邮件和我的SMTP服务器,但我可以确认代码行确实可以使用它。

以下是我尝试的内容:

$limit = (Get-Date).AddDays(0)
$logFile = "C:\STest\Log\log.txt"

#Throw a timestamp on the log file
Add-Content -Path $logFile "=======$(Get-Date)======="

#Get all of the paths for each camera
$paths = Get-ChildItem -Path "C:\Videos\" |Select-Object -ExpandProperty FullName

#for each path we found
foreach ($pa in $paths) {
    # Delete directories older than the $limit.
    $file = Get-ChildItem -Path $pa -Recurse -Force | Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $limit } 
    $file | Remove-Item -Recurse -Force
    $file | Select -Expand FullName | Out-File $logFile -append
    if ($file.FullName -like '1970'){
        Send-MailMessage -to "Joe <Joe@Joe.com>" -from "Tod <Tod@tod.com>" -subject "1970 Found" -body "Testing" -SmtpServer mySMTPserver
    }
}

我也尝试过:

if($file -like "1970"){ } 

if ($file.FullName -like "1970"){ } 

if ($file.FullName -like 1970) { } 

2 个答案:

答案 0 :(得分:5)

-like是一个通配符运算符。匹配1970年代#39;在字符串中的任何位置,您需要在两端添加通配符*字符:

PS C:\> 'something 1970 somethingelse' -like '*1970*'
True

如果你想匹配&#39; 1970&#39;在字符串的开头,省略前导* 匹配1970年代#39;在字符串的末尾,省略尾随*

使用通配符?字符匹配任何单个字符,[n-m]&#39; globbing&#39;用于匹配一系列字符的通配符语法。

请参阅:

  

Get-Help about_Wildcards

有关使用通配符匹配的更多信息。

从效果角度来看,直接比较(-eq-ne-lt-gt)是最快的,然后是通配符匹配(-like-notlike)。正则表达式匹配(-match-notmatch)提供了最大的灵活性,但也是最慢的。

答案 1 :(得分:1)

尝试使用replacement -like with -match

    if($file -match "1970"){ DO SOMETHING }