Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: 0x0309 en 25 Junio 2009, 09:58 AM

Título: [Batch] For dentro de for
Publicado por: 0x0309 en 25 Junio 2009, 09:58 AM
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.
Título: Re: [Batch] For dentro de for
Publicado por: leogtz en 25 Junio 2009, 20:45 PM
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.
Título: Re: [Batch] For dentro de for
Publicado por: SmartGenius en 27 Junio 2009, 20:37 PM
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.