Pasar argumentos a archivos por lotes

Mantenido el

Para pasar argumentos a un archivo por lotes, escriba los valores después del nombre del archivo, separados por espacios. El archivo por lotes los recibe como %1, %2, etc.

Este artículo muestra cómo pasar y recibir argumentos, algo necesario al llamar a otro archivo por lotes para compartir un proceso común, con código de ejemplo.

Cómo pasar argumentos a un archivo por lotes

Basta con escribir los argumentos después del nombre del archivo al ejecutarlo con el comando call o start.

El siguiente código es un ejemplo con call.

call sample.cmd test

Con start, la primera cadena entre comillas se interpreta como el título de la ventana. Si la ruta del ejecutable puede ir entre comillas, es más seguro poner primero un título vacío "".

start "" sample.cmd test
Un error habitual con start

Si escribe start "C:\My Scripts\job.cmd", la primera cadena entre comillas se toma como título y no como ruta del archivo. Ponga primero un título vacío: start "" "C:\My Scripts\job.cmd".

Para más detalles sobre call y start, consulte los siguientes artículos.

Usar los argumentos recibidos

Los argumentos que recibe el archivo por lotes se guardan en orden en %1, %2, %3, etc.

Ejemplo con call

Cree el siguiente archivo por lotes sample.cmd.

@echo off
setlocal

echo El argumento recibido es %1.

echo El segundo argumento es %2.

endlocal

Al ejecutarlo con un argumento, se muestra lo siguiente.

- □ ×
Í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>call sample.cmd test
El argumento recibido es test.
El segundo argumento es .
C:\users\user>

Solo se pasó un argumento, por lo que %2 está vacío.

Con varios argumentos, la salida es la siguiente.

- □ ×
Í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>call sample.cmd test1 test2
El argumento recibido es test1.
El segundo argumento es test2.
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

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

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

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

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

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

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

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

Ejemplo con start

Como se indicó, start necesita un título, así que escriba el título, la ruta del archivo que se ejecuta y los argumentos, en ese orden.

Cree el siguiente archivo por lotes sample.cmd.

@echo off
setlocal

echo El argumento recibido es %1.

echo El segundo argumento es %2.

pause

endlocal

Al ejecutarlo con un argumento, se abre una nueva ventana del símbolo del sistema que muestra lo siguiente.

- □ ×
Ícono de la consola de comandos
sample
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>
El argumento recibido es test.
El segundo argumento es .
Presione una tecla para continuar …

Quitar comillas y formas especiales (%~1, %0)

Para pasar un valor con espacios, enciérrelo entre " (por ejemplo, call sample.cmd "My File.txt"). Entonces %1 incluye las comillas, mientras que %~1 devuelve el valor sin ellas.

%0 contiene el nombre del propio archivo por lotes, y %~dp0 devuelve la ruta de la carpeta donde se encuentra.

Comprobar el número de argumentos

%* contiene todos los argumentos recibidos, pero para manejar con rigor valores con espacios es más seguro contarlos uno a uno con shift.

Cree el siguiente archivo por lotes sample.cmd.

@echo off
setlocal

set count=0

:count_loop
if "%~1"=="" goto count_end
set /A count+=1
shift
goto count_loop

:count_end

echo El número de argumentos es %count%.

endlocal

Al ejecutarlo con argumentos, se muestra lo siguiente.

- □ ×
Í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>call sample.cmd test1 test2 test3
El número de argumentos es 3.
C:\users\user>

Eliminar argumentos con shift

El comando shift descarta el primer argumento y desplaza los demás una posición.

Cree el siguiente archivo por lotes sample.cmd.

@echo off
setlocal

echo El argumento recibido es %1.
shift
echo El segundo argumento es %1.
shift
echo El tercer argumento es %1.

endlocal

Al ejecutarlo con argumentos, se muestra lo siguiente.

- □ ×
Í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>call sample.cmd test1 test2 test3
El argumento recibido es test1.
El segundo argumento es test2.
El tercer argumento es test3.
C:\users\user>

Todos los echo usan %1, pero la salida muestra correctamente el primer, segundo y tercer argumento, porque shift desplaza los demás argumentos cada vez.

shift sirve para más de 9 argumentos

Solo se pueden usar directamente %1 a %9, pero repitiendo shift se pueden procesar en orden los argumentos posteriores a %9. Tenga en cuenta también que %* no cambia al ejecutar shift.

Procesar cada argumento recibido

Aplicando la misma idea, se puede procesar cada argumento por turno.

Cree el siguiente archivo por lotes sample.cmd.

@echo off
setlocal

:loop
if "%~1"=="" goto end
echo El argumento recibido es %~1.
shift
goto loop

:end

endlocal

Al ejecutarlo con argumentos, se muestra lo siguiente.

- □ ×
Í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>call sample.cmd test1 test2 test3
El argumento recibido es test1.
El argumento recibido es test2.
El argumento recibido es test3.
C:\users\user>

Preguntas de práctica

Pregunta 1

Seleccione la forma adecuada de pasar argumentos al llamar a un archivo por lotes desde el símbolo del sistema.

回答がサーバーに送信されることはありません
Pregunta 2

¿Cuál de las siguientes es la forma correcta de pasar varios números como argumentos?

回答がサーバーに送信されることはありません
#Símbolo del sistema #Archivo por lotes #Argumentos #Línea de comandos #Comandos