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
2.Añadir un caracter hasta que sea igual a la palabra
3.Sabiendo el peso de un archivo (%~z)
4.Con el comando dir
5. Con el comando findstr
6. Con el comando debug
saludos
aqui dejo unas diferentes formas de hallar la longitud que hice hace un tiempo
1. Caracter a caracter hasta que uno no se defina
Código (dos) [Seleccionar]
@ECHO OFF
CALL :LENGHT "STRING"
ECHO.%LEN%
PAUSE>NUL
EXIT
========================================================================
:: Mide la longitud de una cadena
:: Devuelve errorlevel=1 si no se especifica la cadena
:LENGHT STRING
SETLOCAL ENABLEEXTENSIONS
SET "STRING=%~1"
:: Empieza el contador en 0
IF "%TMPVAR%"=="" SET/A CONT=0
:: Si no se mandan parametros salimos
IF NOT DEFINED STRING ENDLOCAL & EXIT/B 1
::
:: Extracción de caracteres que aumenta en 1
CALL SET "VAR=%%STRING%:~%CONT%,1%%"
::
IF DEFINED VAR (
:: Sumamos el contador y llamamos a la funcion
SET "TMPVAR=$" & SET/A CONT+=1 & CALL %~0 "%STRING%"
) ELSE (
::Declaramos la variable len
CALL SET LEN=%%CONT%%
)
ENDLOCAL & SET "LEN=%LEN%"
EXIT /B
========================================================================
2.Añadir un caracter hasta que sea igual a la palabra
Código (dos) [Seleccionar]
@ECHO OFF
CALL :LENGTH "STRING"
ECHO %LEN%
PAUSE
EXIT
=========================================================================
:: Devuelve la longitud de una string
:: Si no se define la string devuelve errorlevel=1
:LENGTH STRING
SETLOCAL ENABLEEXTENSIONS
SET "STRING=%~1"
:: Si no se pasan argumentos salimos.
IF NOT DEFINED STRING EXIT/B 1
:: Empieza el contador en 0
IF "%TMPVAR%"=="" SET/A CONT=0
::
CALL SET "VAR=%%STRING:~,%CONT%%%"
IF NOT "%VAR%"=="%STRING%" (
:: Sumamos 1 al contador
SET "TMPVAR=$"
SET/A CONT+=1
:: Llamamos a la funcion
CALL %0 "%~1"
) ELSE (
CALL SET LEN=%%CONT%%
)
ENDLOCAL & SET "LEN=%LEN%"
EXIT/B
=========================================================================
3.Sabiendo el peso de un archivo (%~z)
Código (dos) [Seleccionar]
@ECHO OFF
CALL :LENGTH "STRING"
ECHO.%LEN%
PAUSE>NUL & EXIT
==============================================================================
:: Mide la longitud de una string
:: Crea en el disco un archivo TMP.DAT que al finalizar su función se borra
:LENGTH STRING
SETLOCAL ENABLEEXTENSIONS
:: Nos posicionamos en tmp
PUSHD "%TMP%"
:: Creamos el archivo que contiene la string
ECHO.%~1> "TMP.DAT"
::
FOR %%? IN ("TMP.DAT") DO (
:: Restamos dos caracteres
IF EXIST %%~? SET/A "LEN=%%~Z?-2"
:: Eliminamos el archivo
DEL /F /Q %%~F?
)
::
POPD
::
(
ENDLOCAL
SET LEN=%LEN%
)
EXIT/B
==============================================================================
4.Con el comando dir
Código (dos) [Seleccionar]
@ECHO OFF
CALL:LENGTH "STRING"
ECHO.%LEN%
PAUSE & EXIT
========================================================================================
:: 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
SETLOCAL ENABLEEXTENSIONS
:: Nos posicionamos en tmp
PUSHD "%TMP%"
:: Salimos si no se pasan argumentos
IF "%~1"=="" EXIT/B 1
::
:: Creamos el archivo tmp.dat que contiene la string
ECHO.%~1>TMP.DAT
:: 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)
SET/A LEN-=2
::
POPD
ENDLOCAL & SET LEN=%LEN%
EXIT/B
========================================================================================
5. Con el comando findstr
Código (dos) [Seleccionar]
@ECHO OFF
CALL :LENGTH "STRING"
ECHO.%LEN%
PAUSE & EXIT
==============================================================
:: Mide la longitud de una cadena
:: Devuelve errorlevel=1 si no se especifica la cadena
:LENGTH "STRING"
SETLOCAL ENABLEEXTENSIONS
:: Salimos si no se especifican argumentos
IF "%~1"=="" EXIT/B 1
::
:: Podemos usar también el metacaracter $
FOR /F "DELIMS=:" %%F IN (
'"(ECHO.%~1 & ECHO.) | FINDSTR /O ."'
) DO SET/A LEN=%%~F-3
ENDLOCAL & SET "LEN=%LEN%"
EXIT/B
==============================================================
6. Con el comando debug
Código (dos) [Seleccionar]
@ECHO OFF
CALL :LENGTH "STRING"
ECHO.%LEN%
PAUSE
EXIT
===================================================================================
:: 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
PUSHD "%TEMP%"
:: Creamos el archivo tmp.bin con la string
ECHO.%~1>TMP.BIN
::
:: Cargamos el archivo con debug
(
ECHO.R CX
ECHO.
ECHO.Q
) | 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
FOR /L %%A IN (1 1 4) DO IF "!VAR:~0,1!" EQU "0" SET "VAR=!VAR:~1!"
::
:: Restamos 2 caracteres
SET/A VAR-=2
:: Eliminamos archivos creados
FOR %%F IN ("TMP.BIN" "TMP.DAT") DO DEL /Q /F %%~FF
POPD & ENDLOCAL & SET "LEN=%VAR%"
EXIT/B
===================================================================================
saludos
