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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


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

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Problema con un For en batch
« en: 18 Noviembre 2013, 15:28 pm »

Alguien me podria ayudar con este codigo:


Código:
A:
cd "A:\Iomega\VER"
For /F "tokens=1,2,*" %%a in (A:\Dropbox\Bats\Comodins\series.txt) do (
call A:\Dropbox\Bats\Pendientes\prueba1.bat %%a %%b %%c
call A:\Dropbox\Bats\Pendientes\prueba2.bat
call :prueba3
)
exit
(Está incompleto)

Yo pensaba que el bat "prueba1" llevaria como "%1" el valor que el for tiene en "%%a" cada vez que fuese llamado, pero no es asi.


No esto seguro de que se pueda, pero se pueden introducir asi el valor?








La finalidad de usar eso es que "series.txt" es un fichero donde tengo los nombres de series que tengo para ver, decidi hacerlo asi porque somos un grupo de amigos que las vamos viendo cada uno en su ordenador, asi a la vez que voy practicando batch nos simplifico el trabajo.

Ya tengo el codigo hecho (os lo pego abajo por si lo necesitais) pero quiero reducirlo a algo parecido al formato de arriba, pues el fichero "series.txt" lo uso para 3 batchs mas y asi lo puedo modificar de una forma mas sencilla, ademas tengo demasiados goto en el codigo y es muy muy lio!


PD: si alguien quiere dar algun consejo en concreto o mencinar algun error que tenga que no tenga que ver con la pregunta estaran bien recibidos, pues creo que se nota que no llevo mucho tiempo con esto.

(perdonad el biliguismo, los comentarios estan escritos parte en gallego, parte en castellano)
Codigo:
Código:
A:
cd "A:\Iomega\VER"
set cod=1
:1
set s=666 Park Avenue
set /a cod=%cod%+1
set t=1
set tf=1
goto prueba1
:2
set s=Alphas
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:3
set s=American dad
set /a cod=%cod%+1
set t=7
set tf=9
goto prueba1
:4
set s=American Horror Story
set /a cod=%cod%+1
set t=3
set tf=4
goto prueba1
:5
set s=Anger management
set /a cod=%cod%+1
set t=2
set tf=4
goto prueba1
:6
set s=Apocalipsis en el instituto
set /a cod=%cod%+1
set t=2
set tf=2
goto prueba1
:7
set s=Arrow
set /a cod=%cod%+1
set t=2
set 4
goto prueba1
:8
:9
set s=Boardwalk Empire
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:10
set s=Breaking bad
set /a cod=%cod%+1
set t=5
set tf=6
goto prueba1
:11
set s=Como conoci a vuestra madre
set /a cod=%cod%+1
set t=8
set tf=10
goto prueba1
:12
set s=Da Vinci daemons
set /a cod=%cod%+1
set t=2
set tf=3
goto prueba1
:13
set s=Defiance
set /a cod=%cod%+1
set t=2
set tf=3
goto prueba1
:14
set s=Dexter
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
:15
set s=El mentalista
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
:16
set s=Erase_una vez
set /a cod=%cod%+1
set t=3
set tf=4
goto prueba1
:17
set s=Eureka
set /a cod=%cod%+1
set t=2
set tf=4
goto prueba1
:18
set s=Falling Skies
set /a cod=%cod%+1
set t=4
set tf=5
goto prueba1
:19
set s=Fringe
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:20
set s=Generation kill
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
:21
set s=Hannibal
set /a cod=%cod%+1
set t=2
set tf=4
goto prueba1
:22
set s=Homeland
set /a cod=%cod%+1
set t=3
set tf=6
goto prueba1
:23
set s=House of cards
set /a cod=%cod%+1
set t=1
set tf=3
goto prueba1
:24
set s=Juego de tronos
set /a cod=%cod%+1
set t=4
set tf=6
goto prueba1
:25
set s=La chica invisible
set /a cod=%cod%+1
set t=3
set tf=4
goto prueba1
:26
set s=La cupula
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
:27
set s=Ladron de guante blanco
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
:28
set s=Los simpson
set /a cod=%cod%+1
set t=22
set tf=25
goto prueba1
:29
set s=Misfits
set /a cod=%cod%+1
set t=4
set tf=5
goto prueba1
:30
set s=New Girl
set /a cod=%cod%+1
set t=2
set tf=4
goto prueba1
:31
set s=Peque¤as mentirosas
set /a cod=%cod%+1
set t=2
set tf=3
goto prueba1
:32
set s=Revenge
set /a cod=%cod%+1
set t=3
set tf=4
goto prueba1
:33
set s=Revolution
set /a cod=%cod%+1
set t=2
set tf=4
goto prueba1
:34
set s=Roma criminal
set /a cod=%cod%+1
set t=1
set tf=3
goto prueba1
:35
set s=Sons of anarchy
set /a cod=%cod%+1
set t=1
set tf=3
goto prueba1
:36
set s=Suits
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
:37
set s=The big bang theory
set /a cod=%cod%+1
set t=7
set tf=8
goto prueba1
:38
set s=Vikingos
set /a cod=%cod%+1
set t=1
set tf=3
goto prueba1
:39
set s=The Following
set /a cod=%cod%+1
set t=2
set tf=4
goto prueba1
:40
set s=Elementary
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
:41
set s=The walking dead
set /a cod=%cod%+1
set t=4
set tf=6
goto prueba1
:42
set s=Utopia
set /a cod=%cod%+1
set t=2
set tf=4
goto prueba1
:43
set s=Dos hombres y medio
set /a cod=%cod%+1
set t=10
set tf=12
goto prueba1
:44
set s=Chuck
set /a cod=%cod%+1
set t=5
set tf=6
goto prueba1
:45
set s=Padre de familia
set /a cod=%cod%+1
set t=12
set tf=13
goto prueba1
:46
set s=Community
set /a cod=%cod%+1
set t=3
set tf=5
goto prueba1
:47
set s=Dos chicas sin blanca
set /a cod=%cod%+1
set t=1
set tf=3
goto prueba1
:48
set s=Modern family
set /a cod=%cod%+1
set t=4
set tf=7
goto prueba1
:49
set s=The newsroom
set /a cod=%cod%+1
set t=1
set tf=3
goto prueba1
:50
set s=Finales felices
set /a cod=%cod%+1
set t=2
set tf=4
goto prueba1
:51
set s=Louie
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:52
set s=Wilfred
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:53
set s=Scandal
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:54
set s=Veep
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:55
set s=Bobs Burguer
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:56
set s=Person of interest
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:57
set s=Hope
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:58
set s=Hart of Dixie
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:59
set s=The Bridge
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:60
set s=Rehenes
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:61
set s=Agents of SHIELD
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:62
set s=Vaya Vecinos
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:63
set s=Crosing lines
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:64
set s=Sleepy Hollow
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:65
set s=Bates Motel
set /a cod=%cod%+1
set t=1
set tf=4
goto prueba1
:66
set s=Banshee
set /a cod=%cod%+1
set t=1
set tf=1
goto prueba1
pendientes.bat
:67
set s=dates
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
:67
set s=Ray Donovan
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
pendientes.bat
:68
set s=The americans
set /a cod=%cod%+1
set t=1
set tf=2
goto prueba1
:Reparto
title %cod% de 70
goto %cod%
rem 70 es un numero aproximado, cuando goto marque un numero que no esté dara error y finalizara el batch


:prueba1
rem miramos si existe en pendientes, si non hay ningun capituo pendiente non ten sentido!
if not exist "pendientes\%s%*.avi" goto reparto
rem miro si existen 3 capitulos xa, si xa hay 3 que se pire!
set cuenta1=0
For %%x in ("%s%*.avi") do (
call "A:\Dropbox\Bats\Comodins\contar\cuenta1.bat"
)
if %cuenta1% geq 3 goto reparto

rem si esta o cap 101 e obvio que non hay ningun en Ver asique o mova xa...
rem mover1 porque si estan o 2 e 3 que se movan tamen!
if exist "pendientes\%s% 101.avi" goto mover1
set cap=0
:revalor
set /a c=%t%*100+1
rem este entra en accion cando cambia a temporada dunha serie, fai que a temporada 7 empece no cap 701 e asi sucesivamente.

:prueba2
rem esto quere decir que existe polo menos un capitulo en pendientes
rem ahora vamos a buscar si hay un capitulo en VER, si sabemos cal e con pedir o siguiente basta!
if not exist "%s%*.avi" goto prueba3
if %t% gtr %tf% goto error4
if "%c%" gtr "%t%25" goto error7
if not exist "%s% %c%.avi" set /a c=%c%+1 & goto prueba2 rem da votas hasta que encontre un que exista
set /a cap=%cap%+1
set /a c=%c%+1 rem aumenta 1 pa buscar o siguiente
if not exist "%s% %c%.avi" goto mover2
set /a cap=%cap%+1
set /a c=%c%+1 rem aumenta 1 pa buscar o ultimo (terceiro)
if not exist "%s% %c%.avi" goto mover2
set /a cap=%cap%+1
if %cap%==3 goto reparto

rem si chega aqui algo falla!
echo ERROR1 esto e simbolico, nunca deberia chegar aqui pero por sea caso aqui esta!
pause>nul
exit

:prueba3
if %t% gtr %tf% goto error4
if "%c%" gtr "%t%25" goto error6
if not exist "pendientes\%s% %c%.avi" set /a c=%c%+1 & goto prueba3 rem da votas hasta que encontre un que exista
goto mover4



:mover1
rem chega aqui cando existe o capitulo 1 da primeira temporada, non ten sentido que non o mova, e aproveito pa mover os 3 primeiros
Move "pendientes\%s% 101.avi" .
Move "pendientes\%s% 102.avi" .
Move "pendientes\%s% 103.avi" .
goto reparto

:mover2
rem solo chega aqui si da positivo en prueba2
rem quere decir que teño que mover 2 capitulos de esa serie
if not exist "pendientes\%s% %c%.avi" goto mover3
if exist "pendientes\%s% %c%.avi" move "pendientes\%s% %c%.avi" . & set /a cap=%cap%+1
if %cap%==3 goto reparto
set /a c=%c%+1
if not exist "pendientes\%s% %c%.avi" goto mover3
if exist "pendientes\%s% %c%.avi" move "pendientes\%s% %c%.avi" . & set /a cap=%cap%+1
if %cap%==3 goto reparto
rem solo movo 2 porque estou na premisa de que xa existe polo menos 1!
rem si chega aqui algo falla!
echo ERROR2  en mover2esto e simbolico, nunca deberia chegar aqui pero por sea caso aqui esta!
pause>nul
exit

:mover3
set /a t=%t%+1
set /a c=%t%*100+1
if exist "pendientes\%s% %c%.avi" move "pendientes\%s% %c%.avi" . & set /a cap=%cap%+1
if %cap%==3 goto reparto
set /a c=%c%+1
if exist "%s% %c%.avi" goto reparto
rem esto e unha excepcion do codigo
rem daba problemas cando habia o ultimo cap dunha temporada e os 2 primeiros da siguiente
rem si se da ese caso, esta linea fai que pase de largo esa serie e non dea error (xa que non existe ningun error)
if exist "pendientes\%s% %c%.avi" move "pendientes\%s% %c%.avi" . & set /a cap=%cap%+1
if %cap%==3 goto reparto
goto prueba1
rem si chega aqui algo falla!
echo ERROR3: mover3 esto e simbolico, nunca deberia chegar aqui pero por sea caso aqui esta!

pause>nul
exit

:mover4
rem solo pasa por aqui si o manda a prueba3
if exist "pendientes\%s% %c%.avi" Move "pendientes\%s% %c%.avi" "A:\Iomega\VER" & goto prueba1
rem si chega aqui algo falla
echo ERROR5 nunca deberia chegar aqui pero meto por sea caso
pause>nul
exit


:error4
echo ERROR4: Numero de temporada final (%tf%) incorrecta en %s% >> A:\Documentos\ERRORESPENDIENTES
goto reparto

:error6
echo temporada de inicio (%t%) incorrecta en %s%, cambiar para mayor eficiencia >> A:\Documentos\ERRORESPENDIENTES
set /a t=%t%+1
goto revalor

:error7
echo temporada de inicio (%t%) incorrecta en %s% >> A:\Documentos\ERRORESPENDIENTES
set /a t=%t%+1
goto revalor






« Última modificación: 18 Noviembre 2013, 16:24 pm por EleKtro H@cker » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.870



Ver Perfil
Re: Problema con un For en batch
« Respuesta #1 en: 18 Noviembre 2013, 16:34 pm »

Hola

Yo pensaba que el bat "prueba1" llevaria como "%1" el valor que el for tiene en "%%a" cada vez que fuese llamado, pero no es asi.

Tal y como comentas, eso es así.

De haber un error, debe estar en el script "prueba", solo puedo decirte que revises de nuevo el valor de dichos parámetros en el script "prueba1", una simple comprobación visual:

Código
  1. @Echo off
  2. Echo "%%1=%~1"
  3. Echo "%%2=%~2"
  4. Echo "%%3=%~3"

De todas formas encierra los parámetros con comillas dobles, para evitar falsos positivos...
Código:
call archivo.bat "%%a" "%%b" "%%c"

PD: Ese tocho de libro en gallego o castellano solo lo he mirado de reojo, te digo que has hecho demasiado trabajo manual, no hagas una base de datos en Batch, por lo que mas quieras! xD, se que aprender un lenguaje nuevo es un poco perezoso al principio, pero mi consejo es que deberías invertir ese esfuerzo en aprender en algo más productivo que te facilite la tarea, por ejemplo XML (y olvidarte de Batch al menos para esa tarea de las series) y usar una estructura simple, es facil, y luego puedes representar el contenido de dicho documento XML con más comodidad.

Saludos


« Última modificación: 18 Noviembre 2013, 16:39 pm por EleKtro H@cker » En línea



santi810

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Problema con un For en batch
« Respuesta #2 en: 18 Noviembre 2013, 19:56 pm »

Lo primero gracias, reviso y te comento.
XML lo di en clase por encima pero me sirve de algo para trabajar con batch?
En línea

santi810

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Problema con un For en batch
« Respuesta #3 en: 20 Noviembre 2013, 11:34 am »

no me funciona porque me pasa las comillas
Código:
echo %1
echo %2
echo %3
pause
da como resultado
Código:
A:\Iomega\VER>echo "1"
"1"

A:\Iomega\VER>echo "1"
"1"

A:\Iomega\VER>echo "The Americans"
"The Americans"

A:\Iomega\VER>pause
Presione una tecla para continuar . . .


Entonces al trabajar con %3 me pone ""The americans" 125.avi" y me da error.

dos preguntas:
     como quito las comillas?
     no acabo de entender porque pones el:
Código:
Echo "%%1=%~1"
Echo "%%2=%~2"
Echo "%%3=%~3"
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.870



Ver Perfil
Re: Problema con un For en batch
« Respuesta #4 en: 20 Noviembre 2013, 13:55 pm »

no me funciona porque me pasa las comillas
     no acabo de entender porque pones el:
Código:
Echo "%%1=%~1"

Pues lo pongo precísamente para quitar las comillas...  los parámetros incluyen comillas (aunque tu no las veas), entonces debes expandir la variable para evitar los errores de sintaxis.

Aunque no es necesario quitar las comillas, lo que no debes hacer es añadirle ese otro par de comillas de más.

Ejemplos:

Parámetro por defecto, lleva comillas dobles, esto puede provocar errores inesperados de sintaxis por una maña utilización, como te está dando a ti.
Código:
Echo %1

Parámetro expandido, es decir, sin comillas, esto puede causar errores de sintaxis si el parámetro contiene espacios en el nombre, pues todo argumento debe estar encerrado en comillas dobles para tratarse corréctamente.
Código:
Echo %~1

Parámetro expandido y con comillas, esto ya no puede provocar ningún tipo de error inesperado, siempre que se utilize como es debido.
Código:
Echo "%~1"

Parámetro con 4 comillas dobles, sobran los comentarios.
Código:
Echo "%1"

Saludos.
« Última modificación: 20 Noviembre 2013, 14:49 pm por EleKtro H@cker » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
un problema con vb y batch
Scripting
sorcerer 2 4,281 Último mensaje 28 Enero 2005, 17:00 pm
por Slasher-K
Problema con batch
Scripting
pandozales12 7 3,481 Último mensaje 3 Julio 2011, 22:58 pm
por pandozales12
problema con batch
Scripting
0xDani 2 2,475 Último mensaje 21 Abril 2012, 00:34 am
por Eleкtro
[Batch] Insertar un batch dentro de un batch que fabrique un .txt
Scripting
$pedrojo2704 2 6,268 Último mensaje 23 Agosto 2012, 10:08 am
por $pedrojo2704
[BATCH]Problema con IF LSS
Scripting
Segadorfelix 9 5,115 Último mensaje 24 Diciembre 2012, 19:32 pm
por Binary_Death
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines