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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: [1]
1  Programación / Scripting / [Batch] ¿Cómo leer caracteres y concatenar hasta cierto carácter? en: 20 Octubre 2017, 05:51 am
Buen día amigos, creo este tema con el fin de que me puedan ayudar a poder terminar esta aplicación. Anteriormente hice un tema sobre cómo podia mover archivos con variables en batch (para poder organizar unas rooms), y me ayudaron a resolver ese problema. Ahora necesito automatizar este proceso, ya que el programa me pide los datos y ahora necesito que haga esto:

-El programa debe ubicarse en un directorio y leer el nombre del primer fichero que se encuentre en ese directorio, guardándolo en una variable (Por ejemplo: !nombrecompleto! (Ya lo pude hacer))

-Ahora que guardo ese nombre en una variable, necesito que vaya tomando, concatenando y guardando esos caracteres en otra variable, hasta que se encuentre un "(" y termine el proceso. (A esta variable le llamaremos nombre)

-En otra variable, hacer lo mismo pero solo debe guardar los caracteres que estén después del "(" y antes de un ")"

Pongamos otro ejemplo:
1. El programa al ejecutarse, debe ubicarse en "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX2\Games\[DSK]" y después guardar en la variable !nombrecompleto! el nombre del primer fichero en ese directorio, en este caso "Mattix (19xx)(Pack In Video)(JP).dsk"
2. Ya que tenemos !nombrecompleto! con el valor de "Mattix (19xx)(Pack In Video)(JP).dsk" debe guardar en otra variable llamada !nombre! solo "Mattix" y en otra variable llamada !fecha! solo "19xx" (NOTA: notese que entre "Mattix" y "(19xx)" hay un espacio, se debe eliminar cuando se guarde el nombre)

Y básicamente es lo que buscaría, ya todo el proceso que sigue esta hecho y funciona.
Ya me han recomendado utilizar PowerShell mejor que en batch por lo limitado en sus funciones, el problema es que debido al poco tiempo que me deja la uni no me da para poder estudiar PowerShell, por eso quería terminar esta aplicación en batch.
Se que puede haber problemas, donde pueda haber un "(" entre el nombre y guardar algo que no quería, pero ya revise todas las rooms y ninguna tiene en medio un "(" que pueda generar problemas, ademas de que el proceso se repeteria una vez y pausaria mientras monitoreo en el explorador de archivos si el archivo que sigue no presenta problemas para estas condiciones o mejor lo acomodo manualmente.

Les comparto el código que he hecho:
Código:
@Echo OFF & Title Mover Archivo
SetLocal EnableDelayedExpansion
cd L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX2\Games\[DSK]\
For %%a in (*.dsk) do (
Echo %%a
set nombrecompleto=%%a
Goto SAL
)
:SAL
rem todo lo que esta aqui arriba hace el proceso de tomar el primer nombre del directorio, y a continuacion deberia seguir todo el proceso para hacer la division de cadenas que explique anteriormente
set/p "nombre=Introduzca nombre:"
set/p "fecha=Introduzca fecha:"
rem esta parte de arriba es la que quiero eliminar, pues pide los datos, sin embargo quiero que los obtenga automaticamente, todo el proceso que sigue abajo no es necesario modificar
md "!nombre!"
cd !nombre!
md "!fecha! - !nombre!"
cd !fecha!" - "!nombre!
md "MSX MSX2"
cd MSX MSX2
md DSK
move "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX2\Games\[DSK]\!nombre!*.dsk" "L:\Juegos 2\!nombre!\!fecha! - !nombre!\MSX MSX2\DSK"
cd L:\Juegos 2
pause
start prueba.bat rem esto para volver a ejecutar la aplicacion y repetir el proceso una vez que haya revisado en el explorar y dé enter.
exit

Es posible que me comenten que se puede reducir el código para crear los directorios, el problema es que me da problemas al meter todo en una variable, por eso decidí dejarlo así, aun así me funciona.
Agradecería mucho su ayuda! ya que con ello podría ahorrar muchísimo tiempo. Saludos a todos.
2  Programación / Scripting / Re: [Batch] Duda con instrucción en: 11 Octubre 2017, 06:34 am
Perfecto gracias por las observaciones y los consejos, te comento que ya funciono el programa  ;-) , aunque me surgió otro problema, hasta abajo lo comento. Esto fue lo que hice para que funcionara:
Este es el código final, aunque con el último mensaje que me enviaste lo voy a reducir  ;D
Código:
@echo off
title Mover Archivo
cd L:\Juegos 2
:repetir
SetLocal EnableDelayedExpansion
set/p "nombre=Introduzca nombre:"
set/p "fecha=Introduzca fecha:"
md "!nombre!"
cd !nombre!
md "!fecha! - !nombre!"
cd !fecha!" - "!nombre!
md "MSX MSX"
cd MSX MSX
md CAS
move "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX\Games\[CAS]\!nombre!*.cas" "L:\Juegos 2\!nombre!\!fecha! - !nombre!\MSX MSX\CAS"
pause
goto repetir
exit

Básicamente, remplace todos los % por ! y ahora si me detectaba el contenido de variables, y el ? que usaba en \!nombre!?.cas" para que detectara los que se repitieran, no me funciono pero lo remplace por el * y ahora si  ::)

Sobre lo que comentas en la línea que se modifico en el último mensaje, si me di cuenta cuando vi que estaba creando como 4 carpetas xD pero ya esta arreglado.

Tomare tu recomendación para reducir pasos  :D, Sobre tu posdata, lo que pasa que en la ruta de origen si son dos carpetas MSX, ya que cuando descargue la colección así venia, porque en la raíz estaba la colección de carpetas por compañia (en este caso MSX) y dentro de ella estaban los diferentes sistemas de la compañia (MSX y MSX2).
En la carpeta destino, si lo estoy poniendo como "MSX MSX" para indicar compañia y sistema.

Ahora bien, se puede ver en el último código que publique que puse un goto, lo que pasa es que quiero que se repita el programa para no tener que estarlo abriendo cada que finalice el proceso, pero solo funciona una vez, cuando repite me marca un error ("No se pueden mover varios archivos a un solo archivo"). Siento que hay un problema con las variables, ¿habrá forma de limpiarlas después de la etiqueta del goto?

Y ya mencionado esto, si es cierto lo que dices, batch por lo que veo es muy limitado, el problema es que ocupaba esta aplicación "urgentemente" (acomodar mas de 100,000 rooms manualmente no es nada bonito  :xD te quita demasiado tiempo) y pues preguntando en un grupo de FaceBook me recomendaron que, para aprender algo rápido usara batch, y me parecio buena idea ya que tenia poquitos conocimientos de MS-DOS.
Por el momento solo quiero que esta aplicacion pueda repetir el proceso, mas adelante si necesito ahorrar mas tiempo estudiare PowerShell como me recominedas. Ya habia pensado hacerlo en C# pero he llevado casi nada de C xD

Agradezco mucho tu ayuda, espero se pueda solucionar el último problema. Saludos  ;D
3  Programación / Scripting / Re: [Batch] Duda con instrucción en: 11 Octubre 2017, 04:02 am
Muchas gracias @Eleкtro, te dejo a continuación el código completo de lo que estoy haciendo y voy a intentar lo que me dices.
Código:
@echo off
title Mover Archivo
cd L:\Juegos 2
set/p "nombre=Introduzca nombre:"
set/p "fecha=Introduzca fecha:"
md "%nombre%"
cd %nombre%
md %fecha%" - ""%nombre%"
cd %fecha%" - "%nombre%
md "MSX MSX"
cd MSX MSX
md CAS
move "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX\Games\[CAS]\%nombre%?.cas" "L:\Juegos 2\%nombre%\%fecha%" - "%nombre%\MSX MSX\CAS"
pause
exit

#ACTUALIZACIÓN: Ya ejecute la línea de código echo con las rutas que me proporcionaste para revisar que si tomara los valores. Esto fue lo que imprimió:
Código:
"L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX\Games\[CAS]\Can of Worms?.cas" "L:\Juegos 2\Can of Worms\1986 - Can of Worms\MSX MSX\CAS"
Nota: (nombre=Can of Worms , fecha=1986)
Nota 2: El archivo completo se llama "Can of Worms (1986)(Livewire Software)(GB)[RUN'CAS-'].cas", la idea del poner el ? fue de que tomara todos los archivos que comiencen con "Can of Worms"

Las rutas se han copiado desde el explorador de archivos, entonces el error que me comentas de "J Pednitentes" si es intencional me equivoque al escribirlo cuando creé esa carpeta desde el explorador jeje  :xD .
Explico la intención de este código:
Poseo una colección de ROOMS de juegos y software de sistemas antiguos (MSX, Commodore, MS-DOS, etc.) y quiero organizar por Franquicia\Año de salida - Entrega\Plataforma\Formato de la ROM (si aplica) en la carpeta Juegos 2 (Se llama así porque el disco esta en FAT32 y otra carpeta juegos 1 ya no acepta mas carpetas) dentro de la unidad L:.
Por el momento que estoy aprendiendo batch, hago que la aplicación me pida los datos y creé los directorios y mueva archivos automáticamente, pero ya posteriormente espero que además pueda ubicarse en la carpeta de las rooms sin organizar y tome en automático el nombre y fecha del primer elemento y así en un ciclo o en un goto.
Muchas gracias por responder, saludos.
4  Programación / Scripting / [Batch] Duda con instrucción en: 11 Octubre 2017, 01:14 am
Buenas amigos, presento un problema (apenas estoy empezando a aprender batch), necesito mover unos archivos, donde partes del directorio las va a introducir el usuario a través de variables pero la consola me detecta la variable y no el contenido en si, por tanto no encuentra la dirección, les muestro el código:
Código:
move "L:\J Pednitentes\SISTEMAS SIN ORGANIZAR\PC\MSX\MSX\Games\[CAS]\%nombre%?.cas" "L:\Juegos 2\%nombre%\%fecha% - %nombre%\MSX MSX\CAS"
¿Qué me estará faltando para que detecte el contenido de la variable?
¿Existe algún modificador para que mueva todos los archivos que tengan el mismo nombre? (Hasta cierto carácter)
Agradezco su ayuda prestada.
Saludos.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines