2017-08-07 89 views
0

我试图通过多个文件循环来查看作业是否完成。我对PowerShell非常陌生,并且在创建更详细的程序之前,试图了解循环如何工作的基础知识。我无法弄清楚我的代码中有什么问题。当我运行程序时,不显示输出(“成功”或“失败”)。通过SQL目录中的文件循环来搜索特定字符串的任何建议表示赞赏太:)PowerShell循环通过多个文件

Get-ChildItem "C:\Users\afila\Desktop\TEST" -Filter "*.txt" | 
ForEach-Object{ 
if(Object.Contains("*Loaded successfully*")) 
{ 
    Write-Host "Success" 
} 
else 
{ 
    Write-Host "Fail" 
} 

}

回答

-1

使用时必须使用$_代表传下来的管道对象的管道。例如

Get-ChildItem C:\temp\ -Filter "txt" | 

Foreach-Object{ 
    if($_.Contains("my test info")) 
    { 
     write-host "success" 
    } 
} 

$_类似于词语“这个”在其他语言和是当前对象的只是表示。

+0

它与'this'完全不同,因为该构造已存在于PowerShell中。 – TheIncorrigible1

0

使用$ _,如果您有Object.Contains。它应该是“$ _。Contains”。

由于您在IF语句中使用通配符,因此您也可以试试。 - 默认情况下,使用通配符处理搜索:

Get-ChildItem "C:\Users\afila\Desktop\TEST" -Filter "*.txt" | 
ForEach-Object{ 
if($_ -like "Loaded successfully") 
{ 
    Write-Host "Success" 
} 
else 
{ 
    Write-Host "Fail" 
} 
+0

“-like”的全部目的是通配符操作,所以没有其他行为。 – TheIncorrigible1

+0

这就是我说的吗? “ - 像通配符一样对待搜索”。 – Tchotchke