[CmdletBinding()] Param ( [ValidateScript({ Test-Path $_ } )] [string]$ChessMatchesPath = 'C:\Users\Irwin\Downloads\ChessData-master\ChessData-master', [switch]$DisplaySumTotal ) #region Define regex results. Make search case-insensitive just incase. [regex]$whiteWin = '(?i)result\s+"1-0"' [regex]$blackWin = '(?i)Result\s+"0-1"' [regex]$Tie = '(?i)result\s+"1/2.*' #endregion #region Main Process All pgn files Get-ChildItem -Path $ChessMatchesPath -File *.pgn -Recurse | ForEach-Object { $pgnFile = Get-Content $_.FullName -Raw [PSCustomObject]@{ FileReference = $_.Name WhiteWin = @($whiteWin.Matches($pgnFile)).Count BlackWin = @($blackWin.Matches($pgnFile)).Count Tie = @($Tie.Matches($pgnFile)).Count } } -OutVariable ChessResults If($DisplaySumTotal){ "`n`r" 'Total wins White: {0}' -f ($ChessResults.WhiteWin | Measure-Object -Sum).Sum 'Total wins Black: {0}' -f ($ChessResults.BlackWin | Measure-Object -Sum).Sum 'Total ties: {0}' -f ($ChessResults.Tie | Measure-Object -Sum).Sum } #endregion