Operaciones con cadenas
Al escribir archivos por lotes, a menudo necesitas procesar cadenas, por ejemplo para limpiar nombres de archivo o dar formato a un registro.
Los archivos por lotes no tienen funciones de cadena específicas, pero la sintaxis especial de la expansión de variables permite reemplazar, extraer subcadenas y concatenar.
Reemplazar cadenas
Para reemplazar parte de una cadena almacenada en una variable, usa esta sintaxis.
set nuevavar=%variable:antes=después%
Ejemplo
@echo off
setlocal
set TEXT=Hello World
echo Original: %TEXT%
set TEXT=%TEXT:World=Japan%
echo Reemplazado: %TEXT%
endlocal
Convertir separadores de ruta
set PATH_STR=C:\Users\user\Documents
set PATH_STR=%PATH_STR:\=/%
echo %PATH_STR%

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
Eliminar caracteres (reemplazar por una cadena vacía)
set TEXT= Hello
set TEXT=%TEXT: =%
echo [%TEXT%]
El reemplazo ignora las mayúsculas y minúsculas. %TEXT:hello=Hi% reemplaza Hello, HELLO y hello por igual.
Con * puedes eliminar todo lo que haya hasta una cadena determinada, incluida esta.
set TEXT=key=value
set VALUE=%TEXT:*==%
echo %VALUE%
La cadena que se va a reemplazar no puede empezar por =. Además, las cadenas con % o ! pueden no tratarse correctamente con el reemplazo normal.
Extraer subcadenas
Para extraer una parte de una variable, usa esta sintaxis.
%variable:~inicio,longitud%
| Parámetro | Descripción |
|---|---|
| inicio | Índice que empieza en 0 |
| longitud | Número de caracteres que se extraen (hasta el final si se omite) |
| Valor negativo | Cuenta desde el final de la cadena |
Ejemplo
@echo off
setlocal
set TEXT=ABCDEFGHIJ
rem Los 3 primeros caracteres
echo %TEXT:~0,3%
rem 3 caracteres desde el cuarto (índice 3, porque empieza en 0)
echo %TEXT:~3,3%
rem Omitir los 2 primeros caracteres
echo %TEXT:~2%
rem Los 3 últimos caracteres
echo %TEXT:~-3%
rem Todo excepto los 3 últimos caracteres
echo %TEXT:~0,-3%
endlocal
Relleno con ceros
Este ejemplo rellena números hasta tres dígitos.
@echo off
setlocal enabledelayedexpansion
for /L %%i in (1,1,5) do (
set NUM=00%%i
set NUM=!NUM:~-3!
echo !NUM!
)
endlocal
El relleno con ceros se usa mucho en nombres de archivo secuenciales y en el formato de registros. Añade ceros delante con set NUM=00%%i y toma los 3 últimos caracteres con !NUM:~-3!.
Concatenar cadenas
En los archivos por lotes basta con escribir las variables una junto a otra para concatenar cadenas.
@echo off
setlocal
set FIRST=Hello
set SECOND=World
set RESULT=%FIRST% %SECOND%
echo %RESULT%
endlocal
Construir una cadena en un bucle
@echo off
setlocal enabledelayedexpansion
set RESULT=
for %%f in (*.txt) do (
set RESULT=!RESULT! %%f
)
echo Archivos encontrados:%RESULT%
endlocal
Obtener la longitud de una cadena
Los archivos por lotes no tienen una forma integrada de obtener la longitud de una cadena. En su lugar, puedes extraer un carácter cada vez y contar hasta que el resultado esté vacío.
@echo off
setlocal enabledelayedexpansion
set TEXT=Hello World
set LEN=0
:LOOP
if not "!TEXT:~%LEN%,1!"=="" (
set /a LEN+=1
goto LOOP
)
echo Cadena: %TEXT%
echo Longitud: %LEN%
endlocal
No puedes escribir %TEXT:~%LEN%,1% cuando la posición inicial o la longitud es una variable. Como en el ejemplo anterior, activa enabledelayedexpansion y escribe !TEXT:~%LEN%,1!. Consulta la guía de expansión retardada para más detalles.
Aspectos que conviene tener en cuenta
- Asigna valores con
set "VAR=valor". Enset TEXT=abcun espacio final pasa a formar parte del valor. Si pones la asignación entre comillas, como enset "TEXT=abc", los espacios fuera de las comillas no se incluyen. - Si la posición inicial supera la longitud de la cadena, el resultado queda vacío. Al contar desde el final, como en
%TEXT:~-3%, una cadena de menos de 3 caracteres se devuelve completa. - No existe una función para cambiar entre mayúsculas y minúsculas. Si la necesitas, combina
forcon el reemplazo o usa PowerShell. - El reemplazo y la extracción dan resultados inesperados con variables sin definir. Compruébalo antes con
if defined NOMBRE.
Trabajar con rutas de archivo
En los archivos por lotes, los modificadores de variable de for permiten obtener cada parte de una ruta de archivo.
@echo off
set FILE=C:\Users\user\Documents\report.txt
for %%F in ("%FILE%") do (
echo Ruta completa: %%~fF
echo Unidad: %%~dF
echo Carpeta: %%~pF
echo Nombre: %%~nF
echo Extensión: %%~xF
echo Nombre + extensión: %%~nxF
)
| Modificador | Descripción |
|---|---|
~f | Ruta completa |
~d | Letra de unidad |
~p | Ruta (parte de la carpeta) |
~n | Nombre sin extensión |
~x | Extensión |
~nx | Nombre con extensión |
Resumen
| Operación | Sintaxis |
|---|---|
| Reemplazar una cadena | %variable:antes=después% |
| Extraer una subcadena | %variable:~inicio,longitud% |
| Extraer desde el final | %variable:~-longitud% |
| Concatenar cadenas | set RESULT=%A%%B% |
| Eliminar todo lo anterior a una cadena | %variable:*cadena=% |