Operaciones con cadenas

Mantenido el

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
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>replace.cmd
Original: Hello World
Reemplazado: Hello Japan
C:\users\user>

Convertir separadores de ruta

set PATH_STR=C:\Users\user\Documents
set PATH_STR=%PATH_STR:\=/%
echo %PATH_STR%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %PATH_STR%
C:/Users/user/Documents
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

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

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

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

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

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

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

Eliminar caracteres (reemplazar por una cadena vacía)

set TEXT=  Hello
set TEXT=%TEXT: =%
echo [%TEXT%]
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo [%TEXT%]
[Hello]
C:\users\user>
El reemplazo no distingue mayúsculas

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%
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %VALUE%
value
C:\users\user>
Caracteres que no se pueden reemplazar

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ámetroDescripción
inicioÍndice que empieza en 0
longitudNúmero de caracteres que se extraen (hasta el final si se omite)
Valor negativoCuenta 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
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>substring.cmd
ABC
DEF
CDEFGHIJ
HIJ
ABCDEFG
C:\users\user>

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
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>zeropad.cmd
001
002
003
004
005
C:\users\user>
チェック

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
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>concat.cmd
Hello World
C:\users\user>

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
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>strlen.cmd
Cadena: Hello World
Longitud: 11
C:\users\user>
Usar una variable como posición

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". En set TEXT=abc un espacio final pasa a formar parte del valor. Si pones la asignación entre comillas, como en set "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 for con 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
)
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>path_parts.cmd
Ruta completa: C:\Users\user\Documents\report.txt
Unidad: C:
Carpeta: \Users\user\Documents\
Nombre: report
Extensión: .txt
Nombre + extensión: report.txt
C:\users\user>
ModificadorDescripción
~fRuta completa
~dLetra de unidad
~pRuta (parte de la carpeta)
~nNombre sin extensión
~xExtensión
~nxNombre con extensión

Resumen

OperaciónSintaxis
Reemplazar una cadena%variable:antes=después%
Extraer una subcadena%variable:~inicio,longitud%
Extraer desde el final%variable:~-longitud%
Concatenar cadenasset RESULT=%A%%B%
Eliminar todo lo anterior a una cadena%variable:*cadena=%

Artículos relacionados

Preguntas de práctica

Problema de práctica

¿Qué sintaxis extrae los 5 primeros caracteres de la cadena almacenada en la variable TEXT?

回答がサーバーに送信されることはありません
#Símbolo del sistema #Archivo por lotes #Cadenas #set #Comando