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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


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

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Necesito ayuda
« en: 27 Abril 2021, 21:44 pm »

Buenas necesito ayuda para crear un archivo bat que haga lo siguiente:

-Comprueba que la unidad USB está conectada al sistema y procede a la copia. Si no existe la unidad USB no se realiza la copia. Para ello se puede usar wmic.

Lo que tengo yo ahora es esto:

@echo off
xcopy C:\Users\Usuario\Documents\Fundamentos E:\
echo Copia Completada
@Pause


Cual es el problema? Que no sé nada sobre esto, apenas me estoy informando, mi profesor de hardware está explicando un poco de programación cosa que no debería y me está dando bronca :-\. Debe ser una idiotez lo que pido, pero no sé como hacerlo.

Cualquier ayuda seria genial.


En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Necesito ayuda
« Respuesta #1 en: 27 Abril 2021, 22:19 pm »

Hola, si tu profesor te está evaluando para lo que no te enseñó entonces deberías denunciarlo al rector.

De todas maneras debes usar la sentencia "exist" y la unidad, a eso debes anteponer una condicional de tipo if y dentro del bloque realizar la acción de copiado, en caso contrario debería lanzar un echo con el mensaje de error y retornar un valor positivo para indicarle al sistema que se produjo un error en el resultado del script.

Espero te sirva, saludos.


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.057



Ver Perfil
Re: Necesito ayuda
« Respuesta #2 en: 27 Abril 2021, 23:09 pm »

wmic sirve para ver información del sistema, ahora bien, como siempre estas tareas dependen mucho del contexto, es decir, que instrucciones usar (wmic), cuan complejo puede ser el script, etc, pero también puede faltar la manera de identificar a ese USB que se menciona, puede ser por su nombre, marca, modelo, letra de unidad, Hardware ID, etc.

Parece algo genérico, así que debería de bastar con DeviceID para sacar la Letra de Unidad y DriveType para sacar si es una unidad extraíble o no. El problema es que dices que no sabes nada del tema :xD

Lo más simple y sencillo sería:

Código
  1. WMIC LogicalDisk Where DriveType=2 >nul && xcopy C:\Users\Usuario\Documents\Fundamentos E:\

- Esto sí usar WMIC es obligatorio para identificar que la Unidad es Extraíble y agregando tu suposición de que la Unidad será siempre E:\, sino habría que agregar más líneas para identificar también la Letra de Unidad, incluso si hay más de una Unidad Extraíble u otra manera de identificarlas
En línea

Magnumrace

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Necesito ayuda
« Respuesta #3 en: 28 Abril 2021, 17:09 pm »

Hola, si tu profesor te está evaluando para lo que no te enseñó entonces deberías denunciarlo al rector.

De todas maneras debes usar la sentencia "exist" y la unidad, a eso debes anteponer una condicional de tipo if y dentro del bloque realizar la acción de copiado, en caso contrario debería lanzar un echo con el mensaje de error y retornar un valor positivo para indicarle al sistema que se produjo un error en el resultado del script.

Espero te sirva, saludos.

Gracias por tu ayuda! He intentado aprender un poco de los comandos nuevos que desconozco y me has dicho, pero aún sigo intentando y no me ha salido aún  :xD
En línea

Magnumrace

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Necesito ayuda
« Respuesta #4 en: 28 Abril 2021, 17:17 pm »

wmic sirve para ver información del sistema, ahora bien, como siempre estas tareas dependen mucho del contexto, es decir, que instrucciones usar (wmic), cuan complejo puede ser el script, etc, pero también puede faltar la manera de identificar a ese USB que se menciona, puede ser por su nombre, marca, modelo, letra de unidad, Hardware ID, etc.

Parece algo genérico, así que debería de bastar con DeviceID para sacar la Letra de Unidad y DriveType para sacar si es una unidad extraíble o no. El problema es que dices que no sabes nada del tema :xD

Lo más simple y sencillo sería:

Código
  1. WMIC LogicalDisk Where DriveType=2 >nul && xcopy C:\Users\Usuario\Documents\Fundamentos E:\

- Esto sí usar WMIC es obligatorio para identificar que la Unidad es Extraíble y agregando tu suposición de que la Unidad será siempre E:\, sino habría que agregar más líneas para identificar también la Letra de Unidad, incluso si hay más de una Unidad Extraíble u otra manera de identificarlas

Gracias! Me has ayudado bastante. Solo tengo una pregunta. Supongamos que está en otra unidad el USB.
¿Cómo hago para interactuar con el script y le diga que está en el :H? Y si no está conectado le puedo agregar un mensaje diciendo que no está esa unidad conectada?

Todo me viene de mucha ayuda, puesto que, es todo nuevo para mi. Estoy estudiando administración en sistemas informáticos en red y esto que me está enseñando mi profesor de hardware se va de tema por así decirlo.
En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.057



Ver Perfil
Re: Necesito ayuda
« Respuesta #5 en: 28 Abril 2021, 21:38 pm »

Bueno, como ya dije se puede usar el DeviceID para obtener la letra de Unidad de la Unidad de Almacenamiento USB, para esto ya hay que complicar un poquito el Script:

Código
  1. @Echo Off
  2. For /F %%a In (
  3.  'WMIC LogicalDisk Where DriveType^=2 Get DeviceID 2^>NUL ^| Find ":"'
  4. ) Do (
  5.  Echo Unidad %%a encontrada
  6.  xcopy C:\Users\Usuario\Documents\Fundamentos %%a
  7.  GoTo :salir
  8. )
  9. Echo No hay Unidad USB
  10.  
  11. :salir
  12. Exit /B

El único detalle ahora es cuando hay más de una USB :xD, este Script solo hace la copia en la Primera que encuentra.

Tienes un tutorial de Batch básico/medio acá:
Tutorial de Programación Batch (Nikos3194, 2013)
https://sites.google.com/site/nikos3194rfcindex/Tutorial%20de%20programacion%20Batch%20%5Bfinal%5D.pdf

Recuerda que siempre puede hacer un /? para obtener ayuda de un comando, por ejemplo:

Código
  1. WMIC /?

Salvo el comando WMIC todo lo demás está bien explicado en el Tutorial que puse antes.
En línea

Magnumrace

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Necesito ayuda
« Respuesta #6 en: 29 Abril 2021, 09:21 am »

Bueno, como ya dije se puede usar el DeviceID para obtener la letra de Unidad de la Unidad de Almacenamiento USB, para esto ya hay que complicar un poquito el Script:

Código
  1. @Echo Off
  2. For /F %%a In (
  3.  'WMIC LogicalDisk Where DriveType^=2 Get DeviceID 2^>NUL ^| Find ":"'
  4. ) Do (
  5.  Echo Unidad %%a encontrada
  6.  xcopy C:\Users\Usuario\Documents\Fundamentos %%a
  7.  GoTo :salir
  8. )
  9. Echo No hay Unidad USB
  10.  
  11. :salir
  12. Exit /B

El único detalle ahora es cuando hay más de una USB :xD, este Script solo hace la copia en la Primera que encuentra.

Tienes un tutorial de Batch básico/medio acá:
Tutorial de Programación Batch (Nikos3194, 2013)
https://sites.google.com/site/nikos3194rfcindex/Tutorial%20de%20programacion%20Batch%20%5Bfinal%5D.pdf

Recuerda que siempre puede hacer un /? para obtener ayuda de un comando, por ejemplo:

Código
  1. WMIC /?

Salvo el comando WMIC todo lo demás está bien explicado en el Tutorial que puse antes.

Me has ayudado bastante! Gracias! Seguro este fin de semana empiece a ver un poco y entender mejor el tema.

Saludos!
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Necesito ayuda
« Respuesta #7 en: 29 Abril 2021, 17:38 pm »

No creo que tu profesor pretenda de verdad que resuelvas el tema, sin antes leer la documentación.

El siguiente comando te ilustra sobre las opciones del comando referido:
>wmic logicaldisk /?
En la ruta ...windows\help\ probablemente encuentres el fichero de ayuda: wmic.chm, de no ser así haz una búsqueda por los archivos en tu sistema luego ordénalos por tipo y mira a ver cual es de ayuda: "*wmi*.*"

Código
  1. Formal WMIC command syntaxThe WMIC command-line BNF:
  2.  
  3. <WMI Command>  ::=  [<global switch list>] <command>  
  4. <global switch list>  ::=  <global switches> | <global switches> <global switches list>  
  5. <global switches>  ::=  (/NAMESPACE | /ROLE ) [:<namespace>] |
  6.        /NODE [:<computer id list>] |
  7.        /IMPLEVEL [:<ilevel>] |
  8.        /AUTHLEVEL [:<alevel>] |
  9.        /LOCALE [:<locale identifier>] |
  10.        /PRIVILEGES [:<property>] |
  11.        /TRACE [:<option>] |
  12.        /RECORD [:<file path>] |
  13.        /INTERACTIVE
  14.        /USER [:<user id>] |
  15.        /PASSWORD [:<password id>] |
  16.        /? [:<help type>]  
  17. <computer id list>  ::=  <computer id> | <computer id> <computer id list>  
  18. <command >  ::=  (<alias> [ <WMI object>] | [<alias>] <path where>) [<verb clause>] |
  19.        EXIT |
  20.        CLASS [<class path expression >] [<verb clause>] |
  21.        RESTORE [ <restore file path>]  
  22. <path where>  ::=  [PATH (<path expression> | <class path expression> )][ WHERE <where clause>]  
  23. <alias>  ::=  !! name for the alias. The name will be unique in the context of the namespace in which the alias is defined.
  24.        Note CLASS, PATH, WHERE, RESTORE and EXIT cannot be used as alias names as they appear in the same location in the syntax.  
  25. <WMI object>  ::=  <parens> <alias parameters> <parens> | <alias parameters>  
  26. <path expression>  ::=  !! A WMI path expression including a key clause  
  27. <where clause>  ::=  !! A WQL where clause optionally surrounded by parenthesis  
  28. <class path expression >   !! A WMI path expression that does not include a key clause  
  29. <alias parameters>  ::=  !! one or more space delimited literals that will be used as substitutions in the alias’ PWhere value.  
  30. <verb clause>  ::=  (<verb> [<verb parameters>] |
  31. <standard verb>) [<verb switches>]  
  32. <verb>  ::=  <property name> | <identifier> |
  33. <method name>  
  34. <verb switches>  ::=  
  35.        /INTERACTIVE |
  36.        /NOINTERACTIVE  
  37. <verb parameter>  ::=  <actual parameter> | <actual parameter> , <verb parameter>  
  38. <standard verb>  ::=  
  39.        <get verb> |
  40.        <list verb> |
  41.        <assoc verb> |
  42.        <call verb> |
  43.        <create-set verb> |
  44.        <delete verb>  
  45. <identifier>  ::=  <idhead> [<idrest>]  
  46. <idhead>  ::=  <letter>  
  47. <idrest>  ::=  <identifier> [<letter> | <digit>]  
  48. <get verb>  ::=  GET [<property list>] [<get switches>]  
  49. <property list>  ::=  <property name> | <property name> , <property list>  
  50. <list verb>  ::=  LIST [<list format>|<list switches>]  
  51. <assoc verb>  ::=  ASSOC [<format specifier>]  
  52. <call verb>  ::=  CALL <method name> [<actual parameter list>]  
  53. <actual parameter list>  ::=  <actual parameter> | <actual parameter , <actual parameter list>  
  54. <create-set verb>  ::=  SET <assign list>| CREATE <assign list>  
  55. <assign list>  ::=  <property name> = <property value> |
  56. <property name> = <property value> <assign list>  
  57. <delete verb>  ::=  DELETE  
  58. <get switches>  ::=  
  59.        /VALUE |
  60.        /ALL |
  61.        /TRANSLATE :<table name> |
  62.        /EVERY :<interval> |
  63.        /FORMAT [:<format specifier>] |
  64.        /DESCRIPTION [:<code page>]  
  65. <interval>  ::=  !! numeric value indicating frequency within which values should be returned  
  66. <format specifier>  ::=  
  67.        :<xsl file name> |
  68.        :TABLE |
  69.        :MOF  
  70. <list format>  ::=  
  71.        BRIEF |
  72.        INSTANCE |
  73.        SYSTEM |
  74.        STATUS |
  75.        FULL |
  76. <user format>  
  77. <list switches>  
  78.        /TRANSLATE |
  79.        /EVERY :<interval>|
  80.        /FORMAT [:<format specifier>]  
  81. <help type>  ::=  
  82.        : BRIEF |
  83.        : FULL  
  84.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines