我需要修改此脚本,如果我们找到的目录有" 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) { }
答案 0 :(得分:5)
-like
是一个通配符运算符。匹配1970年代#39;在字符串中的任何位置,您需要在两端添加通配符*
字符:
PS C:\> 'something 1970 somethingelse' -like '*1970*'
True
如果你想匹配&#39; 1970&#39;在字符串的开头,省略前导*
匹配1970年代#39;在字符串的末尾,省略尾随*
。
使用通配符?
字符匹配任何单个字符,[n-m]
&#39; globbing&#39;用于匹配一系列字符的通配符语法。
请参阅:
有关使用通配符匹配的更多信息。
从效果角度来看,直接比较(-eq
,-ne
,-lt
,-gt
)是最快的,然后是通配符匹配(-like
和-notlike
)。正则表达式匹配(-match
和-notmatch
)提供了最大的灵活性,但也是最慢的。
答案 1 :(得分:1)
尝试使用replacement -like with -match
if($file -match "1970"){ DO SOMETHING }