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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Cambiar una letra de unidad extraible en batch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cambiar una letra de unidad extraible en batch  (Leído 5,699 veces)
Zzz01Breikoft

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Cambiar una letra de unidad extraible en batch
« en: 27 Septiembre 2014, 03:36 am »

Hola, soy novato en esto de programación y pues estoy aprendiendo un poco y leyendo libros acerca de todo esto, también estoy llendo a cursos pero apenas estoy empezando, lo que pasa es que estoy creando un programa en batch que lo que hace es simple (nada nuevo)

Primero me pregunta la unidad extraíble a la que quiero yo crear carpetas y de ahí no hace nada mas

Dado que no se como rayos se hace eso, entonces estuve investigando un poco ejemplos de código de fuentes y me encontré algunos que me sirvieron para programa este programa, me ayudo mucho esta página (o foro o lo que sea que se le llame)

Sin embargo ahora lo que quiero es que de la unidad en la que esta trabajando (por ejemplo la F:\) me la cambie a la unidad D:\ ya se que con cmd se hace con diskpart pero en batch sé que no será lo mismo, entonces pues ayudenme en mi programita, soy novato pero entenderé lo que estoy copiando

Aquí está mi código de fuente: (el "scriptcarpeta" fue lo único que hice yo)

Código
  1. Title=Zzz01 Breikoft
  2. color cf
  3. setlocal Enabledelayedexpansion
  4. for /F "tokens=1-9* delims=:\ " %%a in ('fsutil fsinfo drives') do (
  5. Set unidad=%%b & Call :verificar
  6. Set unidad=%%c & Call :verificar
  7. Set unidad=%%d & Call :verificar
  8. Set unidad=%%e & Call :verificar
  9. Set unidad=%%f & Call :verificar
  10. Set unidad=%%g & Call :verificar
  11. Set unidad=%%h & Call :verificar
  12. Set unidad=%%i & Call :verificar
  13. Set unidad=%%j & Call :verificar
  14. )
  15. goto :menu
  16. :Verificar
  17. fsutil fsinfo drivetype !unidad:~-0,1!: | findstr /s "fija extra"
  18. If %errorlevel% EQU 0 (
  19. set /a num+=1
  20. Set Unidad!num!=!unidad:~-0,1!:
  21. goto:eof
  22. ) ELSE (
  23. goto:eof
  24. )
  25. :Menu
  26. cls
  27. echo ========================!num! UNIDADES ENCONTRADAS==========================
  28. echo =======================================================================
  29. echo ======================UNIDADES !unidad1!!Unidad2!!Unidad3!!Unidad4!!Unidad5!!Unidad6!!Unidad7!!Unidad8!!Unidad9!DETECTADAS==============================
  30. echo =======================================================================
  31. echo =====================PRESIONE LA LETRA DE LA UNIDAD====================
  32. set /p opcion=
  33. if exist %opcion::=%: (
  34. goto :scriptcarpeta
  35. ) ELSE (
  36. echo+ & echo No se encuentra la unidad %opcion::=%:...
  37. ping -n 2 LOCALHOST >nul
  38. cls
  39. goto :menu
  40. )
  41. :scriptcarpeta
  42. Setlocal Disabledelayedexpansion
  43. echo =======================================================================
  44. echo =======================================================================
  45. echo ===========================CREANDO CARPETAS============================
  46. md %opcion::=%:\Trabajos
  47. md %opcion::=%:\Sistema
  48. md %opcion::=%:\Trabajos\Im genes
  49. md %opcion::=%:\Trabajos\Videos
  50. md %opcion::=%:\Trabajos\JDIFF
  51. md %opcion::=%:\Trabajos\JDIFF\DATA
  52. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 1"
  53. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 2"
  54. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 3"
  55. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 4"
  56. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 5"
  57. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 6"
  58. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 3"\01.03.00
  59. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 3"\02.03.00
  60. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 3"\03.03.00
  61. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 4"\01.04.00
  62. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 4"\02.04.00
  63. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 4"\03.04.00
  64. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 5"\01.05.00
  65. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 5"\02.05.00
  66. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 5"\03.05.00
  67. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 6"\01.06.00
  68. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 6"\02.06.00
  69. md %opcion::=%:\Trabajos\JDIFF\DATA\"Launcher 6"\03.06.00
  70. md %opcion::=%:\Sistema\"About myself"
  71. md %opcion::=%:\Sistema\Programas
  72. md %opcion::=%:\Sistema\If_Then_History
  73. md %opcion::=%:\Sistema\M£sica
  74. md %opcion::=%:\Sistema\Pantalla
  75. md %opcion::=%:\Sistema\Temp
  76. md %opcion::=%:\Sistema\"About myself"\COMMANDS
  77. md %opcion::=%:\Sistema\"About myself"\"DATA DUMPS"
  78. md %opcion::=%:\Sistema\"About myself"\UNDOS
  79. cd %opcion::=%:\Sistema
  80. attrib "About myself" +r +s +h
  81. attrib Temp +r +s +h
  82. cd %opcion::=%:\
  83. attrib Sistema +r +s +h


« Última modificación: 27 Septiembre 2014, 03:48 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: Cambiar una letra de unidad extraible en batch
« Respuesta #1 en: 27 Septiembre 2014, 04:01 am »

1) Las preguntas sobre Scripts van en esta sección.

2) Los códigos deben publicarse con el formato de código correcto (puedes leer mi firma si no te aclaras)




ya se que con cmd se hace con diskpart pero en batch sé que no será lo mismo, entonces pues ayudenme en mi programita, soy novato pero entenderé lo que estoy copiando

Lo que conoces como CMD es Batch, y lo que conoces como Batch es CMD, el proceso CMD.exe es el intérprete del "lenguaje" Batch (lenguaje entre comillas, porque debido a su simpleza no se considera como tal),
así pues, la CMD (o Command Prompt) es la aplicación encargada de procesar las órdenes/instrucciones que contiene un Script escrito en Batch (o Batch-Script), no hay más de lo que ya hayas visto usando la consola.

Por lo tanto el método a realizar es el mismo, usando la herramienta Diskpart.exe (y también puedes hacerlo con MountVol.exe), ya que Batch debe recurrir a este tipo de aplicaciones externas (o "comandos externos") para ofrecer algún tipo de funcionalidad útil.

Doy por hecho que ya sabes usar diskpart (o que de lo contrario vas a buscar en Google, o a mirar la ayuda del comando Diskpart.exe /? ,  MountVol.exe /?) y no necesitas más ayuda al respecto sabiendo que el procedimiento es exactamente el mismo en Batch, porque te estas refiriendo a eso al hablar de la CMD (en este caso).

Saludos!


« Última modificación: 27 Septiembre 2014, 04:09 am por Eleкtro » En línea

Zzz01Breikoft

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Cambiar una letra de unidad extraible en batch
« Respuesta #2 en: 27 Septiembre 2014, 04:10 am »

Muchas gracias! me ayudaste mucho, creí que mi código estaba un poco mal :3
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: Cambiar una letra de unidad extraible en batch
« Respuesta #3 en: 27 Septiembre 2014, 05:25 am »

creí que mi código estaba un poco mal :3

Si, estás usando malas practicas, los Strings deberías encerrarlos de principio a fin, no solamente las partes que contengan espacios, ya que resulta confuso, es bastante irreconocible en cualquier editor de texto (para programadores, no el notepad), y hacer eso no te asegura que no vayas a cometer equivocaciones en el resto del String.

Aparte de eso, si tu intención es crear una variable por cada unidad encontrada entonces no es necesario setear 9 variables especificas, puedes crear las variables que hagan falta en tiempo de ejecución, o crear un menú con ellas, etc.

Te escribo un ejemplo:
Código
  1. @ECHO OFF & (CHCP 1252)1>NUL
  2.  
  3. :: Enumeración 'DriveType' de la Class 'Win32_LogicalDisk' de la Interface WMI.
  4. :: Documentación: http://msdn.microsoft.com/en-us/library/aa394173%28v=vs.85%29.aspx
  5. Set /A "HardDisk=3"
  6. Set /A "RemovableDisk=2"
  7.  
  8. :: Cambio el directorio de trabajo actual.
  9. PUSHD "%SystemRoot%\System32"
  10.  
  11. :: Ejecuto una Query al comando externo WMIC.exe y filtro la salida resultante.
  12. For /F "Delims= " %%# In (
  13.   '.\WBEM\WMIC.exe "logicaldisk" "get" "caption"^,"drivetype" ^| .\FindStr.exe "%HardDisk% %RemovableDisk%"'
  14. ) Do (
  15.   :: Obtengo las letras de los dispositivos conectados.
  16.   Call Set "DRIVES=%%DRIVES%%%%#"
  17. )
  18.  
  19. :: Simple Debug.
  20. REM Echo [Debug] Unidades encontradas: %DRIVES%
  21.  
  22. :: Elimino la letra de unidad desde la que se inició este Script;
  23. :: ya que la letra de la unidad activa (del SO) no se podrá modificar.
  24. :: Doy por hecho que se ejecutó desde la unidad activa del SO, de lo contrario esto necesita un retoque.
  25. Call Set "DRIVES=%%DRIVES:%~d0=%%"
  26.  
  27. :: Reemplazo el caracter ":" del resto de letras por un caracter de "espacio";
  28. :: de esta manera puedo usar el delimitador por defecto ("espacio") en un For.
  29. Set "DRIVES=%DRIVES::= %"
  30.  
  31. :: Por último, proceso cada letra de unidad para crear variables de manera dinámica.
  32. Set "INPUT="
  33. Set /A "Count=0"
  34.  
  35. For %%D in (%DRIVES%) Do (
  36.  
  37.   Set /A "Count+=1"             & REM Incremento el contador.
  38.   Call Set "_%%Count%%=%%D"     & REM Seteo la variable con el número del contador.
  39.   Call Set "INPUT=%%INPUT%%%%D" & REM Asigno la letra de unidad a la variable.
  40.  
  41. )
  42.  
  43. :: Pregunto al usuario por una letra de unidad.
  44. ".\Choice.exe" /C "%INPUT%" /M "Elige una letra de unidad"
  45. Set /A "CHOICE=%ErrorLevel%"   & REM Guardo el resultado.
  46. Call Set "DRIVE=%%_%CHOICE%%%" & REM Seteo la letra de unidad elegida.
  47.  
  48. :: Y manejo la unidad de la forma que se desee:
  49. Call Echo Listado de carpetas: de la unidad "%DRIVE%:\" | .\More.com
  50. Dir /B /AD "%DRIVE%:\*"
  51.  
  52. :: Vuelvo al directorio de trabajo inicial.
  53.  
  54. Pause&Exit /B 0

Saludos
« Última modificación: 27 Septiembre 2014, 05:31 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
tomar letra de unidad en batch
Scripting
Dyehuty 4 8,918 Último mensaje 4 Febrero 2009, 17:53 pm
por Dyehuty
Cambiar letra a unidad de sistema[Solucionado]
Windows
SeñorK. 2 11,454 Último mensaje 18 Diciembre 2010, 13:17 pm
por Randomize
Obtener letra de unidad extraible BATCH
Scripting
daniel.r.23 4 8,586 Último mensaje 22 Marzo 2013, 09:43 am
por Eleкtro
[DUDA] Cambiar letra de unidad a archivo con un Batch [DUDA] « 1 2 »
Windows
MrMaticool 10 11,290 Último mensaje 12 Febrero 2014, 17:55 pm
por MrMaticool
MOVIDO: Cambiar una letra de unidad extraible en batch
Programación General
Eleкtro 0 2,828 Último mensaje 27 Septiembre 2014, 03:48 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines