Saber la longitud de una cadena (length string) es una función que se necesita usar en muchos codes
aqui dejo unas diferentes formas de hallar la longitud que hice hace un tiempo
1. Caracter a caracter hasta que uno no se defina
========================================================================
:: Mide la longitud de una cadena
:: Devuelve errorlevel=1 si no se especifica la cadena
:LENGHT STRING
:: Empieza el contador en 0
IF "
%TMPVAR%"==""
SET/A CONT=0
:: Si no se mandan parametros salimos
::
:: Extracción de caracteres que aumenta en 1
CALL SET "VAR=
%%STRING%:~
%CONT%,1
%%"
::
:: Sumamos el contador y llamamos a la funcion
SET "TMPVAR=$"
& SET/A CONT+=1
& CALL %~0 "
%STRING%"
::Declaramos la variable len
)
========================================================================
2.Añadir un caracter hasta que sea igual a la palabra
=========================================================================
:: Devuelve la longitud de una string
:: Si no se define la string devuelve errorlevel=1
:LENGTH STRING
:: Si no se pasan argumentos salimos.
:: Empieza el contador en 0
IF "
%TMPVAR%"==""
SET/A CONT=0
::
IF NOT "
%VAR%"=="
%STRING%"
(
:: Sumamos 1 al contador
:: Llamamos a la funcion
)
=========================================================================
3.Sabiendo el peso de un archivo (%~z)
==============================================================================
:: Mide la longitud de una string
:: Crea en el disco un archivo TMP.DAT que al finalizar su función se borra
:LENGTH STRING
:: Nos posicionamos en tmp
:: Creamos el archivo que contiene la string
::
:: Restamos dos caracteres
:: Eliminamos el archivo
)
::
::
(
)
==============================================================================
4.Con el comando dir
========================================================================================
:: Mide la longitud de una string
:: Crea en el disco un archivo TMP.DAT que al finalizar su función se borra
:: Devuelve errorlevel=1 si no se especifica la cadena
:LENGTH
:: Nos posicionamos en tmp
:: Salimos si no se pasan argumentos
::
:: Creamos el archivo tmp.dat que contiene la string
:: Con dir obenemos el peso del archivo
FOR /F "TOKENS=3"
%%F IN ('"
DIR /A:-D
| FIND /I "TMP.DAT""'
) DO SET "LEN=
%%~F"
::RESTAMOS DOS CARACTERES (ASCII 10 Y 13)
::
========================================================================================
5. Con el comando findstr
==============================================================
:: Mide la longitud de una cadena
:: Devuelve errorlevel=1 si no se especifica la cadena
:LENGTH "STRING"
:: Salimos si no se especifican argumentos
::
:: Podemos usar también el metacaracter $
FOR /F "DELIMS=:"
%%F IN (
==============================================================
6. Con el comando debug
===================================================================================
:: Mide la longitud de una string
:: Crea en el disco dos archivos TMP.BIN y TMP.DAT que se borran al finalizar.
:: Usa el comando debug
:LENGTH STRING
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
:: Nos posicionamos en temp
:: Creamos el archivo tmp.bin con la string
::
:: Cargamos el archivo con debug
(
) | DEBUG TMP.BIN >TMP.DAT
:: Con for cogemos el registro CX
FOR /F "TOKENS=2 SKIP=1"
%%A IN ('TYPE TMP.DAT
^| SORT'
) DO SET "VAR=
%%A"
:: Quitamos ceros
::
:: Restamos 2 caracteres
:: Eliminamos archivos creados
FOR %%F IN ("TMP.BIN" "TMP.DAT"
) DO DEL /Q /F
%%~FF
===================================================================================
saludos :D
Muy curioso, solo había visto el primer método.
Realmente es muy curioso, por cierto que tal este codigo basado en el primer metodo.
Es para poder contar los elementos con un separador.
@echo off
cls
call :LENGHT "uno,dos,tres,cuatro,cinco,seis"
echo %LEN%
pause
:LENGHT STRING
SETLOCAL ENABLEEXTENSIONS
SET "STRING=%~1"
:: Empieza el contador en 0
IF "%TMPVAR%"=="" SET/A CONT=1
:: Si no se mandan parametros salimos
IF NOT DEFINED STRING ENDLOCAL & EXIT/B 1
set "res="
for /f "tokens=%CONT% delims=," %%a in (%1) do (
set res=%%a
)
:: Extracción de caracteres que aumenta en 1
CALL SET "VAR=%res%"
IF DEFINED VAR (
IF NOT "%VAR%"=="" SET "TMPVAR=$" & SET/A CONT+=1 & CALL %~0 "%STRING%"
) ELSE (
SET/A CONT-=1
CALL SET LEN=%%CONT%%
)
ENDLOCAL & SET "LEN=%LEN%"
EXIT /B
Espero que a vosotros tambien os ayude. :P