@echo off
setlocal enabledelayedexpansion
setlocal enableextensions
set wwc_debug=
set wwc_byte=
set wwc_line=
set wwc_word=
set wwc_args=
for %%a in ( %* ) do (
if /i "%%~a" == "/?" (
call :get_help
goto end_script
)
if /i "%%~a" == "/d" (
set wwc_debug=0
) else (
if /i "%%~a" == "/c" (
set wwc_byte=0
) else (
if /i "%%~a" == "/l" (
set wwc_line=0
) else (
if /i "%%~a" == "/w" (
set wwc_word=0
) else (
set wwc_args=!wwc_args! "%%~a"
))))
)
if not defined wwc_byte if not defined wwc_line if not defined wwc_word (
set wwc_byte=0
set wwc_line=0
set wwc_word=0
)
set wwc_t_byte=0
set wwc_t_line=0
set wwc_t_word=0
set wwc_t=0
for %%a in ( !wwc_args! ) do (
if defined wwc_debug (
echo.>&2
echo [!DATE: =0! !TIME: =0!] Setting next file: "%%~a">&2
echo.>&2
)
set /a wwc_t+=1
set wwc_text=
if defined wwc_line (
call :count_lines_and_words "%%~a"
set /a wwc_t_line+=!wwc_1_line!
call :adjust_right !wwc_1_line!
set wwc_1_line=!wwc_result!
set wwc_text=!wwc_1_line!
)
if defined wwc_word (
if not defined wwc_line (
call :count_lines_and_words "%%~a"
)
set /a wwc_t_word+=!wwc_1_word!
call :adjust_right !wwc_1_word!
set wwc_1_word=!wwc_result!
set wwc_text=!wwc_text! !wwc_1_word!
)
if defined wwc_byte (
set wwc_1_byte=%%~za
set /a wwc_t_byte+=!wwc_1_byte!
call :adjust_right !wwc_1_byte!
set wwc_1_byte=!wwc_result!
set wwc_text=!wwc_text! !wwc_1_byte!
)
echo !wwc_text! %%~a
)
if !wwc_t! gtr 1 (
set wwc_text=
if defined wwc_line (
call :adjust_right !wwc_t_line!
set wwc_t_line=!wwc_result!
set wwc_text=!wwc_t_line!
)
if defined wwc_word (
call :adjust_right !wwc_t_word!
set wwc_t_word=!wwc_result!
set wwc_text=!wwc_text! !wwc_t_word!
)
if defined wwc_byte (
call :adjust_right !wwc_t_byte!
set wwc_t_byte=!wwc_result!
set wwc_text=!wwc_text! !wwc_t_byte!
)
echo !wwc_text! total
)
:end_script
endlocal
goto :EOF
:count_lines_and_words
set wwc_1_line=0
set wwc_1_word=0
for /f "delims=[] tokens=1,*" %%b in ( 'find /n /v "" "%~1"' ) do (
set /a wwc_1_line+=1
call :count_words %%~c
)
set /a wwc_t_line+=!wwc_1_line!
goto :EOF
:count_words
if "%~1" == "" goto :EOF
if defined wwc_debug echo.%1>&2
set /a wwc_1_word+=1
shift
goto count_words
goto :EOF
:adjust_right
rem The value should be adjusted to the right side within the field width of 7 characters
set wwc_result= %~1
set wwc_result=!wwc_result:~-7!
goto :EOF
:get_help
echo Usage:
echo %~n0 [OPTION]... [FILE]...
echo Print line, word, and byte counts for each FILE, and
echo a total line if more than one FILE is specified.
echo.
echo /C print the byte counts
echo /L print the line counts
echo /W print the word counts
goto :EOF
Monday, 15 June 2009
WC: Emulation of the unix command
This is curious, joke. It is attempt to emulate the unix-commad wc. Do not consider this as fully featured application. It has essential shortcomings - slower than analogs and it gives great mistakes when counting the number of words. This is related with features of processing of special characters when passing them as arguments.
Ярлыки:
cmd-bat,
feel-sorry-for-throw-out,
shell,
unix,
unix-to-nt,
unix-to-win,
windows
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment