powershell - 如何在PowerShell中循环匹配某个文件和一个字符串?
问题描述
我的文件夹中有一些文件,格式名称文件是这样的
US0908ABC
US0908DEF
US0908GHI
我想做循环来检查这些文件是否与我已经初始化的 2 个变量匹配。如果文件与我的变量匹配,它将返回匹配的文件。
这就是我所做的。我使用了这段代码,我可以将这些文件与我的变量匹配,但只检查 1 个变量,而不检查我的两个变量。
$Variable_1 = "US"
$Variable_2 = "0908"
$Path = "C:\Doc\File"
$SW = Get-ChildItem -Path $Path
if($SW -match $Variable_1 -and $Variable_2)
{ $SW
Write-Host "Found"
}
else {
Write-Host "Check Again!"
}
更新
Function Check
{
$n = 0
while (-not (Test-Path -Path $Path)) {
Start-Sleep -s 5
$n++
Foreach($File in $SW) {
If(($File.Name -match $Variable_1) -and ($File.Name -match $Variable_2)){
Write-Host ">>file Found: $File"
}
}
}
Write-Host ">>File found after $n attempts"
return $true
}
$Variable_1 = "US"
$Variable_2 = "0908"
$Path = "C:\Doc\File"
$SW = Get-ChildItem -Path $Path
If(Check)
{
Write-Host ">>Found"
}
else {
Write-Host "Not Found"
}
解决方案
你可以去:
$Variable_1 = "US"
$Variable_2 = "0908"
$Path = "C:\Doc\File"
$SW = Get-ChildItem -Path $Path
$SW | ForEach-Object {
if ($_.Name.Contains($Variable_1) -and $_.Name.Contains($Variable_2)) {
$_
Write-Host "Found"
}
else {
Write-Host "Check Again!"
}
}
更简单的方法可以在一行中编码:
$foundFiles = Get-ChildItem -Path "C:\Doc\File" | Where-Object {$_.Name.Contains("US") -and $_.Name.Contains("0908") }
$foundFiles
是类型array
并且包括所有过滤的文件。您可以$foundFiles
通过for 循环或foreach 循环或通过ForEach-Object
cmdlet 结合管道操作进行迭代(例如,$foundFiles | ForEach-Object { Write-Host "$_" }, where
$_` 包括管道中的实际文件对象)。
如果要过滤文件结尾,可以将-Include
参数添加到Get-ChildItem
. 如果要在嵌套文件夹中查找文件,可以添加-Recurse
开关。
因此,您的上述示例可以简化为一个 cmdlet 调用:
Get-ChildItem -Path "C:\Doc\File" -Include "*US*0908*" -Recurse
输出:
Get-ChildItem -Path "C:\Doc\File" -Include "*US*0908*" -Recurse
Directory: C:\Doc\File
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 16.07.2019 07:27 0 US0908ABC
-a---- 16.07.2019 07:27 0 US0908DEF
-a---- 16.07.2019 07:28 0 US0908GHI
推荐阅读
- ios - 在 SwiftUI 中聚焦 TextField 似乎不起作用
- axon - 使用 Axon 框架的超低延迟进程
- python - 在 Google 表格 api 中插入 Python 行
- java - 将 TestIdentity / LegaIdentity 添加到 StartedMockNode
- webrtc - WebRTC 连接g 只发送一个候选人
- python - 基于匹配多个键:值对在列表中组合字典
- .net-core - OData.Client.DataServiceContext 在调用 SSL 服务器后返回空列表
- ios - 使用 shell 脚本将 dSYM/.symbols 文件上传到 appstore 自动连接
- angular - 以安全的方式从部署在 App 引擎上的 Angular 应用程序调用 http 云功能
- firebase - 映射集合时获取 Firestore 文档 ID