如果静态字符串位于文件的子字符串上,则 powershell 活动

问题描述 投票:0回答:1

当文件中存在静态字符串时,我需要执行一项活动

if  ( Get-Content -Path C:\appoggio\*.TXT  -filter {$_.Substring(250,5)} ) = '05032' {
 Set-Location C:\appoggio\prova  -WhatIf
 Write-Warning 'ok'
}

文件

           2401188832220240801083447050320240100750910000101002076        IT0000007994            251630830000   00000002401001652820240801   00000000000000000000000000000000000000                              00  0000000000  9                      05032     0139200170.                             00000000

>  
 BATCH     2401188850220240801073602051230240100750980000101002076        IT0000006570            251765330000   00000002401001646020240801   000000000000000000000000000000000000001000000081fcc082              00  0000000000  9                      05123     0085800050.                             00000000
powershell if-statement substring
1个回答
0
投票

据推测,根据您的示例数据,您的

startIndex
调用中的
SubString
参数应该是
249
:

$sample = @'
           2401188832220240801083447050320240100750910000101002076        IT0000007994            251630830000   00000002401001652820240801   00000000000000000000000000000000000000                              00  0000000000  9                      05032     0139200170.                             00000000

>
 BATCH     2401188850220240801073602051230240100750980000101002076        IT0000006570            251765330000   00000002401001646020240801   000000000000000000000000000000000000001000000081fcc082              00  0000000000  9                      05123     0085800050.                             00000000
'@

$sample.Substring(249, 5) # 05032

您还需要在

-Raw
调用中使用
Get-Content
来获取文件内容作为单个多行字符串而不是字符串数组。因此,总而言之,您可能寻找的条件应该是:

if ((Get-Content 'C:\appoggio\*.TXT' -Raw).Substring(249, 5) -eq '05032') {
    Set-Location C:\appoggio\prova -WhatIf
    Write-Warning 'ok'
}

您还应该考虑到这可以获取多个文件的内容,因为您使用的是通配符 (

*.txt
),因此在这种情况下这种情况可能会失败,如果您添加更多信息,可能有更好的方法来执行此操作你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.