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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Necesito ayuda con este .bat
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda con este .bat  (Leído 2,867 veces)
IISiroII

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Necesito ayuda con este .bat
« en: 4 Marzo 2016, 20:49 pm »

Tengo que hacer este ejercicio:
Desarrolla un fichero bat que reciba al menos 4 parametros:
• El primer parametro sera una carpeta de ORIGEN.
• El segundo parametro sera una carpeta de DESTINO.
• El ultimo parametro sera la OPERACION a realizar.
• Los parametros existentes entre el tercero y el ultimo seran extensiones de archivos.
El fichero bat validara que al menos hay 4 parametros. En caso de error finalizara.
El fichero bat validara que ORIGEN existe. En caso de que no exista finalizara.
El fichero bat validara que DESTINO existe. En caso de que no exista finalizara.
El fichero bat validara que OPERACION vale 1,2,3 o 4. En caso de que no lo haga el fichero bat
finalizara.
Acciones a realizar en funcion del valor de operación:
OPERACION=1
• Copia el contenido de la carpeta ORIGEN a la carpeta DESTINO.
OPERACION=2
• Muestra los atributos de todos los archivos existentes en la carpeta DESTINO.
OPERACION=3
• Muestra todas las carpetas y subcarpetas (ficheros no) existentes en la carpeta ORIGEN.
OPERACION=4
• Muestra el numero total de archivos (carpetas no) con las extensiones pasadas como
parametros existentes en la carpeta ORIGEN y en la carpeta DESTINO

Por el momento llevo esto hecho:
Código
  1. @echo off
  2. cls
  3. setlocal enabledelayedexpansion
  4. set contador=0
  5. if "%1%"=="" goto error
  6. if not exist %1 goto fin
  7. if "%2%"=="" goto error
  8. if not exist %2 goto fin
  9. if "%3%"=="" goto error
  10. if %3%==1 goto operacion1
  11. if %3%==2 goto operacion2
  12. if %3%==3 goto operacion3
  13. if %3%==4 goto operacion4
  14. goto fin
  15. if "%4%"=="" goto error
  16.  
  17. :operacion1
  18. copy %1 %2
  19. goto fin
  20. :operacion2
  21. attrib /s %2\*
  22. goto fin
  23. :operacion3
  24. tree %1
  25. goto fin
  26. :operacion4
  27. for /r %1 %%i in (*%4, *%5, *%6) do (
  28. set /a contador=contador+1
  29. echo %%i
  30. )
  31. for /r %2 %%j in (*%4, *%5, *%6) do (
  32.  
  33. set /a contador=contador+1
  34. echo %%j
  35. )
  36. echo El programa ha detectado %contador% archivos
  37. goto fin
  38. :error
  39. echo ERROR
  40. :fin
  41. echo El programa ha finalizado
  42.  


Lo único que me está fallando ahora mismo, obviamente son los for /r de operacion4, ya que quiero que dentro del paréntesis después del in me pille n parámetros, pero que estos parámetros empiecen desde el 4º ( es decir, que no me pille el %1, %2, %3).


« Última modificación: 4 Marzo 2016, 20:53 pm por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.806



Ver Perfil
Re: Necesito ayuda con este .bat
« Respuesta #1 en: 4 Marzo 2016, 21:12 pm »

Lo único que me está fallando ahora mismo, obviamente son los for /r de operacion4, ya que quiero que dentro del paréntesis después del in me pille n parámetros, pero que estos parámetros empiecen desde el 4º ( es decir, que no me pille el %1, %2, %3).

No me percato de la obviedad.

El script funciona como es debido, de lo contrario, ¿qué otro problema le encuentras?:

Código:
Script.cmd ".\" ".\" "" ".ext1" ".ext2" ".ext3"

Código
  1. @Echo OFF
  2. SetLocal EnableDelayedExpansion
  3.  
  4. Set /A "srcFileCount"
  5. Set /A "dstFileCount"
  6.  
  7. :: Directorio de origen
  8. (For /R "%~1" %%i in (
  9.    "*%~4", "*%~5", "*%~6"
  10. ) Do (
  11.    Set /A "srcFileCount+=1"
  12. ))1>Nul
  13.  
  14. :: Directorio de destino
  15. (For /R "%~2" %%i in (
  16.    "*%~4", "*%~5", "*%~6"
  17. ) Do (
  18.    Set /A "dstFileCount+=1"
  19. ))1>Nul
  20.  
  21. Echo: Se han encontrado !srcFileCount! archivos en el directorio de origen.
  22. Echo: Se han encontrado !dstFileCount! archivos en el directorio de destino.
  23. Pause&Exit /B 0

PD: Recuerda que puedes setear variables locales para asignarle los valores delos argumentos y así no trabajar con índices. También puedes utilizar el comando SHIFT para deslizar los argumentos hacia la izquierda.

Saludos!


« Última modificación: 4 Marzo 2016, 22:23 pm por Eleкtro » En línea

IISiroII

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Necesito ayuda con este .bat
« Respuesta #2 en: 4 Marzo 2016, 21:40 pm »

Lo que quiero hacer basicamente con el ultimo  apartado es que haga esto, que lo haga con n parametros:



El problema que tengo es que cuando pongo for /r %1 %%i in (*%4) do ( ... , aunque ponga más parametros en la ejecución, solo me detecta el 4º parametro, y si pongo
for /r %1 %%i in (*%4, *%5, *%6) do (... y pongo en la ejecución 1 solo parametro me hace esto:


« Última modificación: 4 Marzo 2016, 22:29 pm por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.806



Ver Perfil
Re: Necesito ayuda con este .bat
« Respuesta #3 en: 4 Marzo 2016, 22:28 pm »

¿Qué argumentos le estás pasando? (muestra como llamas al script por linea de comandos). ¿has probado a hacerlo como en el código que te mostré?.

Saludos
« Última modificación: 4 Marzo 2016, 22:32 pm por Eleкtro » En línea

IISiroII

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Necesito ayuda con este .bat
« Respuesta #4 en: 4 Marzo 2016, 22:35 pm »

Código:
archivo.bat carpetaorigen carpetadestino 4(para hacer la operacion4) .bat .txt .exe

En un principio, a partir del 4 parametro, tengo que tener la posibilidad de poner todas las extensiones que quiera, es decir, no solo hasta el sexto
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.806



Ver Perfil
Re: Necesito ayuda con este .bat
« Respuesta #5 en: 5 Marzo 2016, 00:31 am »

a partir del 4 parametro, tengo que tener la posibilidad de poner todas las extensiones que quiera, es decir, no solo hasta el sexto

Eso no es posible realizarlo de una manera simple ni elegante en un lenguaje tan limitado como Batch, puesto que para empezar, está limitado al uso de 10 variables de argumento de forma simultanea (%0 a %9).

El límite real es de 255 argumentos, pero solo nos permite usar 10 variables para ello, sin embargo, como te comenté en el mensaje anterior, puedes utilizar el comando Shift para deslizar la posición de los argumentos, es decir, pasar el valor de la variable de argumento "invisible" %10 a la variable de argumento %9 y etc, esa es la solución, pero aun asi deberás realizar algo como este tedioso código de aqui abajo, puesto que el comando Shift no afecta al orden de la variable que agrupa todos los argumentos (%*)

Código
  1. @Echo OFF
  2.  
  3. :: ...
  4.  
  5. If "%~4" NEQ "" (
  6. Set "fileExts="*%~4""
  7. GoTo :JoinFileExtensions
  8. )
  9.  
  10. :JoinFileExtensions
  11. If "%~4" EQU "" (GoTo :FindFiles)
  12. Set "fileExts=%fileExts%, "*%~4""
  13. GoTo :JoinFileExtensions
  14.  
  15. :FindFiles
  16. Echo Archivos a buscar: %fileExts%
  17.  
  18. REM For /R ... In (%fileExts%) Do (...)
  19. :: ...
  20.  
  21. Pause&Exit /B 0

Saludos!
« Última modificación: 5 Marzo 2016, 00:34 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito ayuda con este bat x favor
Scripting
Qarol 8 5,191 Último mensaje 4 Octubre 2007, 22:45 pm
por Qarol
[AYUDA][javascript] Soy muy nuevo en JS y necesito ayuda con este codogo
Desarrollo Web
Noxware 2 2,566 Último mensaje 30 Septiembre 2014, 10:20 am
por trig0
ayuda!! necesito ayuda con este pequeño codigo en c++
Programación C/C++
giraffe 1 4,670 Último mensaje 27 Mayo 2015, 06:25 am
por engel lex
Necesito ayuda con este problema (nuevo en php).
PHP
dyedhck 0 2,170 Último mensaje 1 Agosto 2017, 16:39 pm
por dyedhck
Necesito ayuda con este ABM please!
Programación Visual Basic
djnicken 5 3,559 Último mensaje 14 Abril 2020, 19:07 pm
por simorg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines