При условии, что разделитель также не встречается в строках в кавычках, следующий скрипт PowerShell
проверяет каждую строку в файле и использует Measure-Object
для поддержания -Sum, -Average -Min, -Max и-Count of the delimiters.
> Get-Content .\test.csv| ForEach-Object{($_ -split '~').Count}|Measure-Object -Sum -Average -Minimum -Maximum
Count : 3
Average : 8
Sum : 24
Maximum : 8
Minimum : 8
Property :
Если Average, Max и Min равны, все строки имеют одинаковое количество столбцов.
Чтобы быть в теме, обернутый в пакетный файл:
:: Q:\Test\2019\03\19\SO_55231094.cmd
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
set "inputFile=.\test.csv"
:: clear var with prefix _
for /f "delims==" %%A in ('set _ 2^>nul') do set "%%A="
for /f "usebackq tokens=1,2 delims=: " %%A in (`
powershell -nop -c "(Get-Content $ENV:inputFile)|ForEach-Object{($_ -split '~').Count}|Measure-Object -Sum -Average -Minimum -Maximum"
`) do if "%%B" neq "" Set "_%%A=%%B"
Set _
Пример вывода
> Q:\Test\2019\03\19\SO_55231094.cmd
_Average=8
_Count=3
_Maximum=8
_Minimum=8
_Sum=24