Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Все уже, получил нужные циферки, но сама идея различить строчные/прописные буквы только средствами CMD покоя не давала...

Таки соорудил свой батничек без внешних вызовов FindStr...
Идея в том, что для set при замене подстроки не важно, какой символ искать, и подменив в строке мелких букв искомую, получаем туже самую строку, если искомая буква строчная, иначе буква прописная.

Код: Выделить весь код
@Echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

set C=0
set S=0
set W=0
set Chars=abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя

for /f "usebackq tokens=2,3 delims=	" %%P in ("%~dpn0.txt") do if not %%P_==_ if not %%Q_==_ call :Calc %%P "%%Q"
set /a T=%S%+%W%
set S=          %S%
set S=%S:~-11%
set W=          %W%
set W=%W:~-11%
set T=          %T%
set T=%T:~-11%
Echo Spares: %S%
Echo Service:%W%
Echo ===================
Echo Total:  %T%
exit

:Calc
set ch=%~2
set ch=%ch:~0,1%
set b=!Chars:%ch%=%ch%!
for /f "tokens=1 delims=.," %%C in ("%1") do set /a C=%%C
if %Chars%==%b% (set /a W+=C) else (set /a S+=C)
exit /b
зы: Заметил пару неприятных моментов:
1. Неинициализированные в основном теле переменные (в моем случае S и W) работают как локальные, т.е. их значения не сохраняются.
2. Поскольку если используешь "SetLocal EnableDelayedExpansion" - жди случайных искажений имен файлов и некоторых данных, а наличие записи set b=!Chars:%ch%=%ch%! требует включения этого режима, то попробовал включать режим непосредственно перед указанной строкой, а следом отключать - при этом в итогах также получал одни нули.

-------
Как сказало Дерево Дровосеку: "я - пень".

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:21, 17-06-2010 | #5