elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [batch] Error con For y Do
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [batch] Error con For y Do  (Leído 3,775 veces)
Sk9ITk5Z


Desconectado Desconectado

Mensajes: 2.306



Ver Perfil WWW
[batch] Error con For y Do
« en: 4 Marzo 2009, 18:26 pm »


estoy haciendo un script para crear carpetas de todo el mes con la fecha,  pero hay un pequeño problema, que no crea nada jaajaja :xD
lo del SET FOLDER y MKDIR no esta mal porque lo cale sin el for y si me crea el folder pero al meterlo  al ciclo ya no me hace nada...

:(... dejo el code aver si alguien me puede ayudar...

Código:
@echo off
echo                 **********
echo                 *Sk9ITk5Z*
echo ******************************************
echo *    crear carpetas pára respaldos       *
echo *              mensuales                 *
echo ******************************************
echo De cual mes quieres crear las carpetas?
SET /P m=
echo Cuantos dias tiene el mes?
SET /P d=
SET dia=%date:~0,2%
SET mes=%m%
SET año=%date:~6,4%
REM ******ciclo para crear las carpetas********
FOR /L %%i IN (1,1,%d%) DO (
 SET FOLDER=%dia%-%mes%-%año%
 MKDIR %FOLDER%
)
REM *******termina el ciclo********************
PAUSE


« Última modificación: 4 Marzo 2009, 19:14 pm por Sk9ITk5Z » En línea

Este es un pueblo de corazón extraviado, no quiere conocer mis caminos por eso no entraran en mi descanso.
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [batch] Error con For y Do
« Respuesta #1 en: 4 Marzo 2009, 20:13 pm »

Código:
@echo off
setlocal enableextensions

:main
(set mes=)
(set anho=)
(set mesanho=)
echo.mes:1 a 12
echo.anho:1980 a 2009
set /p mesanho=mes-anho:
if not defined mesanho (goto :main)
set mesanho | findstr.exe /r "^mesanho=[0-9]*-[0-9]*$" >nul || (echo.formato incorrecto&goto :main)
for /f "tokens=1-2 delims=- eol=" %%^> in ("%mesanho%") do set /a mes=%%^>&set /a anho=%%^?
if %mes% lss 1 (echo.mes no puede ser 0.&goto:main)
if %mes% gtr 12 (echo.mes no puede mayor a 12.&goto:main)
if %anho% lss 1980 (echo.anho no puede ser menor a 1980.&goto:main)
if %anho% gtr 2099 (echo.anho no puede ser mayor a 2099.&goto:main)
set bisiesto=false
set feb=28
if 2 equ %mes% (call :bisiesto %anho%)
if /i %bisiesto%==true (set feb=29)
for /f "tokens=%mes%" %%a in ("31 %feb% 31 30 31 30 31 31 30 31 30 31") do set limite=%%a
for /l %%d in (1,1,9) do mkdir 0%%d-%mes%-%anho% >nul 2>&1
for /l %%d in (10,1,%limite%) do mkdir %%d-%mes%-%anho% >nul 2>&1
pause
goto :eof

:BISIESTO
::VERSION: 1.7
::$AUTHOR: CARLOS
SETLOCAL
SET BISIESTO=FALSE
SET /A MOD1="%1 %% 4" >NUL 2>&1
SET /A MOD2="%1 %% 100" >NUL 2>&1
SET /A MOD3="%1 %% 400" >NUL 2>&1
IF [%MOD1%]==[0] (IF NOT [%MOD2%]==[0] (SET BISIESTO=TRUE))
IF [%MOD3%]==[0] (SET BISIESTO=TRUE)
ENDLOCAL & SET "BISIESTO=%BISIESTO%"
GOTO :EOF


« Última modificación: 27 Julio 2009, 07:46 am por 0x0309 » En línea

Sk9ITk5Z


Desconectado Desconectado

Mensajes: 2.306



Ver Perfil WWW
Re: [batch] Error con For y Do
« Respuesta #2 en: 4 Marzo 2009, 20:29 pm »

y todo ese codigote hace lo mismo que el mio??????? :huh:
En línea

Este es un pueblo de corazón extraviado, no quiere conocer mis caminos por eso no entraran en mi descanso.
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [batch] Error con For y Do
« Respuesta #3 en: 4 Marzo 2009, 21:53 pm »

disculpa, lo modifiqué y lo dejé cómo tú querías, con solicitud al usuario.
Debes ingresar mes y anho separado por un guión. Ejemplo:
1-2009

No es necesario solicitar la cantidad de días, pues todos los meses tienen la misma cantidad de días todos los años, excepto febrero que tiene 29 si el año es bisiesto.

Puedes ajustar el rango del año, yo lo deje de 1980 a 2099.
« Última modificación: 4 Marzo 2009, 21:58 pm por 0x0309 » En línea

Sk9ITk5Z


Desconectado Desconectado

Mensajes: 2.306



Ver Perfil WWW
Re: [batch] Error con For y Do
« Respuesta #4 en: 5 Marzo 2009, 16:13 pm »

aver si em doy a enteneder...

cuando corro el script con solo esto: si me cre la carpeta ..
Código:
 SET FOLDER=%dia%-%mes%-%año% 
 MKDIR %FOLDER%

pero cuando lo meto en un for no me ahce nada:

Código:
FOR /1 IN (1,1,%d%) DO (
 SET FOLDER=%dia%-%mes%-%año%
 MKDIR %FOLDER%
)

que parte esta mal del for?????
En línea

Este es un pueblo de corazón extraviado, no quiere conocer mis caminos por eso no entraran en mi descanso.
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [batch] Error con For y Do
« Respuesta #5 en: 5 Marzo 2009, 17:41 pm »

Mira, tienes problemas de lógica y de programación batch.
Tu código corregido queda así. Dejo comentado lo antiguo y en rojo los cambios:

@echo off
setlocal enabledelayedexpansion
echo                 **********
echo                 *Sk9ITk5Z*
echo ******************************************
echo *    crear carpetas pára respaldos       *
echo *              mensuales                 *
echo ******************************************
echo De cual mes quieres crear las carpetas?
rem SET /P m=

SET /P mes=

echo Cuantos dias tiene el mes?
rem SET /P d=
rem SET dia=%date:~0,2%
rem esto para que si no lo usas nunca


SET /P dia=

rem SET mes=%m%

SET año=%date:~6,4%
REM ******ciclo para crear las carpetas********
rem FOR /L %%i IN (1,1,%d%) DO
FOR /L %%i IN (1,1,%dia%) DO (
rem SET FOLDER=%dia%-%mes%-%año%
SET FOLDER=%%i-%mes%-%año%
 rem MKDIR %FOLDER%
MKDIR !FOLDER!
)
REM *******termina el ciclo********************
PAUSE


Explicación: se renombra la variable m por mes respectivamente, esto es para evitar tener dos variables con el mismo contenido, se borra set dia=%date:~0,2% porque eso no será utilizado, más bien se renombra la variable d por dia.
Ahora, los for realizan la expansión simple de variables cuando leen, y no cuando ejecutan, por eso cuando haces:
SET FOLDER=%dia%-%mes%-%año%
se crea dicha variable, pero cuando haces:
MKDIR %FOLDER%
el for no expande FOLDER porque cuando recién for leyó FOLDER no existía por lo que aunque crees la variable dentro del for, no será expandida porque la expansión simple la realiza cuando leyó y no cuando ejecuta, y aún si la variable FOLDER hubiese existido antes, con MKDIR FOLDER crearías siempre la misma carpeta porque la expandiría solo al leerla.
De todas formas tienes un error de lógica porque cuando haces:
FOR /L %%i IN (1,1,%d%) DO (
 SET FOLDER=%dia%-%mes%-%año%
estás siempre creando la misma carpeta en FOLDER por eso:
se reemplaza ese %dia% por %%i

y luego se utiliza expansión retardada (no simple) para que siempre for utilize el valor actual de la variable.
se reemplaza:
MKDIR %FOLDER%
por
MKDIR !FOLDER!

la expansión retardada se activó al principio con SETLOCAL ENABLEDELAYEDEXPANSION


Aún así, yo te escribí por segunda vez tu script (usando expresiones regulares para validar la entrada), no sé si lo habrás visto (actualicé el post largo que dijiste) porque se debe validar las entradas, por ejemplo que realmente escriban números y no letras en la variable mes y año, y que no presionen simplemente enter, porque se pueden producir resultados "catástroficos", por ejemplo si cuando solicita mes presionas enter, y cuando solicita anho pones un numero, por ejemplo 2009, se crearían 2008 carpetas.

« Última modificación: 5 Marzo 2009, 17:46 pm por 0x0309 » En línea

Sk9ITk5Z


Desconectado Desconectado

Mensajes: 2.306



Ver Perfil WWW
Re: [batch] Error con For y Do
« Respuesta #6 en: 5 Marzo 2009, 18:04 pm »

entonces toda gira alrededor del for, me quedo bien entendido gracia man 
« Última modificación: 6 Marzo 2009, 18:42 pm por Sk9ITk5Z » En línea

Este es un pueblo de corazón extraviado, no quiere conocer mis caminos por eso no entraran en mi descanso.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
BATCH encuentra el error
Scripting
Pirat3net 8 4,918 Último mensaje 22 Julio 2011, 04:08 am
por SuperDraco
Error con batch
Scripting
Danydarko 3 2,678 Último mensaje 9 Febrero 2018, 16:08 pm
por Eleкtro
Ayuda con un Error en Batch
Scripting
Black_Phoenix 1 1,920 Último mensaje 19 Junio 2018, 18:17 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines