Ejercicio Misión Imposible en Batch para ASIR (con Bash y PowerShell)

Ejercicio Misión Imposible en Batch para ASIR (con Bash y PowerShell)

Actualizado: 26 de febrero de 2026.

Este tutorial esta pensado para que un alumno de 1 de ASIR pueda resolver el ejercicio sin perderse, incluso si es la primera vez que toca scripts.

Objetivo final del ejercicio: pedir un nombre, crear una carpeta con ese nombre, generar doc1.log a doc5.log, y renombrar todo a .txt de una sola vez.

Prerrequisitos

  1. Un equipo con Windows 10 u 11 para ejecutar el .bat.
  2. Acceso a Bloc de notas y a Símbolo del sistema (CMD).
  3. Saber abrir una carpeta en el explorador de archivos.
  4. Para equivalencias:
  5. Bash en Linux/macOS (o Git Bash en Windows).
  6. PowerShell 5.1+ o PowerShell 7+.

Qué vas a aprender

  1. Como crear un script .bat desde cero.
  2. Como pedir datos al usuario con set /p.
  3. Como crear carpetas y archivos vacios por comandos.
  4. Como renombrar archivos por extension en lote.
  5. Como mejorar un script basico con validaciones reales.
  6. Como llevar el mismo ejercicio a Bash y PowerShell.

Enunciado del ejercicio (explicado fácil)

El ejercicio te pide un script que haga exactamente esto:

  1. Preguntar al usuario su nombre.
  2. Crear una carpeta con ese nombre.
  3. Entrar en esa carpeta.
  4. Crear 5 archivos vacios: doc1.log, doc2.log, doc3.log, doc4.log, doc5.log.
  5. Cambiar todos esos archivos de .log a .txt en un solo comando.

Contrato funcional esperado:

  1. Entrada por teclado: nombre de usuario.
  2. Salida en disco: una carpeta con ese nombre y 5 archivos doc1.txt a doc5.txt.
  3. Si el usuario no escribe nombre, la version mejorada debe pedirlo otra vez.
  4. Si la carpeta ya existe, la version mejorada debe avisar y pedir otro nombre.

Solución mínima oficial en Batch (.bat)

Esta es la solucion minima clasica, fiel al enunciado:

@echo off
echo ==========================
echo LA MISION IMPOSIBLE :)
echo ==========================

REM 1) Preguntar nombre
set /p nombre=Escribe tu nombre y pulsa Enter:

REM 2) Crear carpeta con ese nombre
mkdir "%nombre%"

REM 3) Entrar en la carpeta
cd "%nombre%"

REM 4) Crear 5 archivos vacios doc1.log ... doc5.log
type nul > doc1.log
type nul > doc2.log
type nul > doc3.log
type nul > doc4.log
type nul > doc5.log

REM 5) Cambiar extension .log a .txt de un golpe
ren *.log *.txt

echo.
echo Listo! Se creo la carpeta y los archivos.
pause

Resultado esperado (ejemplo):

LA MISION IMPOSIBLE :)
Escribe tu nombre y pulsa Enter: Carlos
Listo! Se creo la carpeta y los archivos.
Presione una tecla para continuar . . .

Explicación línea por línea (ultra básica)

  1. @echo off: evita que se impriman todos los comandos en pantalla.
  2. set /p nombre=...: muestra un texto y guarda lo que escriba el usuario en la variable nombre.
  3. mkdir "%nombre%": crea una carpeta. Las comillas permiten nombres con espacios (Ana Maria).
  4. cd "%nombre%": entra en la carpeta que acabas de crear.
  5. type nul > doc1.log: crea un archivo vacio.
  6. Repetimos esa linea hasta doc5.log.
  7. ren *.log *.txt: renombra todos los archivos .log a .txt en bloque.
  8. pause: deja la ventana abierta para ver el resultado.

Que significa *.log:

  1. * = “cualquier nombre”.
  2. .log = “que termine en .log”.
  3. En conjunto: “todos los archivos que acaben en .log”.

Versión mejorada de Batch (validaciones + bucles)

La siguiente version mantiene el ejercicio original, pero evita errores comunes:

  1. No acepta nombre vacio.
  2. Si la carpeta ya existe, pide otro nombre.
  3. Genera los 5 archivos con bucle (menos repeticion).
  4. Muestra un listado final para comprobar resultado.

Este es el contenido recomendado para mision.bat (el archivo real de esta carpeta):

@echo off
setlocal EnableExtensions

echo ==========================
echo LA MISION IMPOSIBLE :)
echo ==========================
echo.

:pedir_nombre
set "nombre="
set /p "nombre=Escribe tu nombre y pulsa Enter: "

if "%nombre%"=="" (
    echo [ERROR] Debes escribir un nombre.
    echo.
    goto pedir_nombre
)

if exist "%nombre%\\" (
    echo [ERROR] Ya existe la carpeta "%nombre%".
    echo Escribe otro nombre para no mezclar archivos.
    echo.
    goto pedir_nombre
)

mkdir "%nombre%" || (
    echo [ERROR] No se pudo crear la carpeta.
    pause
    exit /b 1
)

cd /d "%nombre%" || (
    echo [ERROR] No se pudo entrar en la carpeta.
    pause
    exit /b 1
)

for /L %%i in (1,1,5) do (
    type nul > "doc%%i.log"
)

ren *.log *.txt 2>nul

if exist "doc5.txt" (
    echo.
    echo OK: se crearon y renombraron los 5 archivos.
) else (
    echo [ERROR] No se pudo completar el renombrado.
    pause
    exit /b 1
)

echo.
echo Archivos finales:
dir /b
echo.
pause
exit /b 0

Salida esperada de la version mejorada (ejemplo):

==========================
LA MISION IMPOSIBLE :)
==========================

Escribe tu nombre y pulsa Enter: Ana Maria

OK: se crearon y renombraron los 5 archivos.

Archivos finales:
doc1.txt
doc2.txt
doc3.txt
doc4.txt
doc5.txt

Pasos de ejecución en Windows 10/11 (CMD)

  1. Abre Bloc de notas.
  2. Copia el codigo de la version mejorada.
  3. Guarda como mision.bat.
  4. Muy importante:
  5. En tipo de archivo, selecciona Todos los archivos.
  6. No lo guardes como mision.bat.txt.
  7. Abre CMD en esa carpeta.
  8. Ejecuta:
mision.bat

Comprobacion manual:

  1. Escribe un nombre (ejemplo: Carlos).
  2. Entra en la carpeta creada.
  3. Confirma que existen exactamente:
  4. doc1.txt
  5. doc2.txt
  6. doc3.txt
  7. doc4.txt
  8. doc5.txt

Comandos utiles de comprobacion en Windows:

cd Carlos
dir /b

Equivalencias: Bash y PowerShell

En esta carpeta tambien tienes las versiones listas:

  1. mision.sh
  2. mision.ps1

Version Bash (mision.sh)

#!/usr/bin/env bash
set -euo pipefail

echo "=========================="
echo "LA MISION IMPOSIBLE :)"
echo "=========================="
echo

while true; do
  read -r -p "Escribe tu nombre y pulsa Enter: " nombre

  if [[ -z "${nombre// }" ]]; then
    echo "[ERROR] Debes escribir un nombre."
    echo
    continue
  fi

  if [[ -e "$nombre" ]]; then
    echo "[ERROR] Ya existe '$nombre'. Usa otro nombre."
    echo
    continue
  fi

  break
done

mkdir -- "$nombre"
cd -- "$nombre"

for i in {1..5}; do
  : > "doc${i}.log"
done

for f in *.log; do
  [[ -e "$f" ]] || { echo "[ERROR] No hay archivos .log para renombrar."; exit 1; }
  mv -- "$f" "${f%.log}.txt"
done

echo
echo "OK: se crearon y renombraron los 5 archivos."
echo "Archivos finales:"
ls -1

Salida esperada (ejemplo):

Escribe tu nombre y pulsa Enter: Carlos
OK: se crearon y renombraron los 5 archivos.
Archivos finales:
doc1.txt
doc2.txt
doc3.txt
doc4.txt
doc5.txt

Version PowerShell (mision.ps1)

$ErrorActionPreference = "Stop"

Write-Host "=========================="
Write-Host "LA MISION IMPOSIBLE :)"
Write-Host "=========================="
Write-Host ""

while ($true) {
    $nombre = Read-Host "Escribe tu nombre y pulsa Enter"

    if ([string]::IsNullOrWhiteSpace($nombre)) {
        Write-Host "[ERROR] Debes escribir un nombre."
        Write-Host ""
        continue
    }

    if (Test-Path -LiteralPath $nombre) {
        Write-Host "[ERROR] Ya existe '$nombre'. Usa otro nombre."
        Write-Host ""
        continue
    }

    break
}

New-Item -ItemType Directory -Path $nombre | Out-Null
Set-Location -Path $nombre

1..5 | ForEach-Object {
    New-Item -ItemType File -Path ("doc{0}.log" -f $_) | Out-Null
}

Get-ChildItem -Filter "*.log" | Rename-Item -NewName { $_.Name -replace '\.log$', '.txt' }

$txtCount = (Get-ChildItem -Filter "*.txt").Count
if ($txtCount -ne 5) {
    throw "No se pudieron generar los 5 archivos .txt"
}

Write-Host ""
Write-Host "OK: se crearon y renombraron los 5 archivos."
Write-Host "Archivos finales:"
Get-ChildItem -Name

Salida esperada (ejemplo):

Escribe tu nombre y pulsa Enter: Ana Maria

OK: se crearon y renombraron los 5 archivos.
Archivos finales:
doc1.txt
doc2.txt
doc3.txt
doc4.txt
doc5.txt

Retos extra guiados

Reto 1: Cambia los nombres para crear informe1.loginforme5.log.

Reto 2: Crea 10 archivos en vez de 5.

Reto 3: Pide al usuario cuantos archivos quiere crear y usa ese numero.

Reto 4: Antes de renombrar, muestra cuantos .log existen.

Reto 5: Al final, escribe un resumen.txt con fecha y nombre del alumno.

Pista guiada para reto 3 en Batch:

set /p "cantidad=Cuantos archivos quieres crear: "
for /L %%i in (1,1,%cantidad%) do type nul > "doc%%i.log"

Checklist final de verificación

Checklist editorial:

  1. El tutorial tiene un unico H1.
  2. Incluye bloque SEO completo.
  3. Incluye Fuente verificada.
  4. Incluye equivalencias Bash y PowerShell.

Checklist funcional (manual):

  1. Caso feliz:
  2. Entrada: Carlos
  3. Resultado: carpeta Carlos con doc1.txtdoc5.txt.
  4. Caso con espacios:
  5. Entrada: Ana Maria
  6. Resultado: carpeta Ana Maria con 5 .txt.
  7. Caso vacio:
  8. Entrada: solo Enter.
  9. Resultado: mensaje de error y nueva peticion de nombre.
  10. Caso carpeta existente:
  11. Entrada: nombre ya usado.
  12. Resultado: mensaje de error y nueva peticion.
  13. Caso re-ejecucion:
  14. Ejecutar otra vez con nombre diferente.
  15. Resultado: no mezcla archivos entre carpetas.

Troubleshooting

  1. Problema: se guarda como mision.bat.txt.
  2. Solucion: en Bloc de notas usa Tipo: Todos los archivos.
  3. Problema: Acceso denegado.
  4. Solucion: ejecuta en una carpeta donde tengas permisos de escritura (por ejemplo tu Escritorio).
  5. Problema: no se renombra nada con ren *.log *.txt.
  6. Solucion: comprueba que los archivos realmente terminan en .log.
  7. Problema: PowerShell bloquea scripts.
  8. Solucion:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
  1. Problema: Bash no ejecuta mision.sh.
  2. Solucion:
chmod +x mision.sh
./mision.sh

FAQ corta

Esta solucion sirve para examen?

Si. Primero estudia la solucion minima, luego usa la mejorada para demostrar dominio tecnico.

Por que usamos comillas en rutas?

Para soportar nombres con espacios, como Ana Maria.

Puedo cambiar doc por otro prefijo?

Si, mientras mantengas la logica de crear y renombrar.

Es obligatorio saber Bash y PowerShell para este ejercicio?

No. El ejercicio de clase es Batch, pero las equivalencias te ayudan a entender automatizacion real.

Share this content:

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.