[Batch] For dentro de for

Iniciado por 0x0309, 25 Junio 2009, 09:58 AM

0 Miembros y 1 Visitante están viendo este tema.

0x0309

Hace tiempo que quería hacer un for dentro de otro for, y por fin me resultó, solo tenía que escapar los paréntesis.

Aquí una utilidad:


@echo off
setlocal enabledelayedexpansion

set desordenados=100 008 066 077 000 520
call :ordenar %desordenados%
echo.Desordenados:%desordenados%
echo.Ordenados:%ordenados%
pause
goto :eof

:ordenar
for /f "tokens=*" %%a in (
'
^(for %%_ in ^(%*^) do @echo.%%_^)^|sort
'
) do set ordenados=!ordenados!%%a

goto :eof


De esa forma se evita tener que escribir a un archivo, puede que tenga más utilidades.

leogtz

Que bien, no se me había ocurrido  :D

No hace falta escapar '(', solo ')'.

Salida:
Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion

set desordenados=100 008 066 077 000 520
call :ordenar %desordenados%
echo.Desordenados:%desordenados%
echo.Ordenados:%ordenados%
pause
goto :eof

:ordenar
for /f "tokens=*" %%a in (
'
(for %%_ in (%*^) do @echo.%%_^)^|sort
'
) do set ordenados=!ordenados!%%a

goto :eof

Salida:
Desordenados:100 008 066 077 000 520
Ordenados:000 008 066 077 100 520
Presione una tecla para continuar . . .


Saludos, 0x0309.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SmartGenius

No solamente con un FOR, sino con los demas comandos que pueden necesitar de paentesis....ya lo habia probado asi "escapando" los parentesis...

Código (dos) [Seleccionar]
:getlabel
for /f "tokens=8" %%a in ('^(echo USB^)^|label /MP %1:^|find "unidad"') do (set label=%%a)
if "%label%"=="tiene" set label=Unidad
(echo %label%)|label /MP %1:>nul
if "%label%"=="Unidad" set label=USB
goto :eof


Saludos.