Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: rochro en 10 Marzo 2014, 22:11 pm



Título: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: rochro en 10 Marzo 2014, 22:11 pm
Soy nueva en esto y quisiera ayuda en poder crear un script donde me pueda capturar el nombre del archivo (incluyendo extensión), lo almacene en una variable y así poder ejecutar una tarea en cada uno de ellos generando un bucle.

EJEM:
D:\archivos
--->X.t01
   subdirectorio
--->Y.t01
   subdirectorio
--->Z.t01

la tarea a ejecutar seria --> runpkr00 -d nombredelarchivo.t01 (se necesita ejecutar el programa en cada uno de los archivos)


Espero haberme hecho entender. Gracias de antemano.

Saludos.

--
Rossmery Chacón


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: Almapa en 10 Marzo 2014, 22:34 pm
Hola Rossmery, la mejor forma de aprender es probando. Aunque pierdas un poco más de tiempo al principio, luego habrás mejorado bastante más que tan solo leyendo lo que otro puede haber programado por ti.

Te echo una mano en cuanto a las funciones que puedes gastar, dejándote así mismo una página muy recomendable para formarte http://ss64.com/nt/syntax.html

En cuanto a obtener los archivos dentro del directorio "archivos" puedes utilizar el comando "Dir":
http://ss64.com/nt/dir.html

Por lo que hace al bucle pueder utilizar el "For /f" que tomará como parámetro los resultados de otra funcion (en tu caso tomará cada archivo que será la salida del comando DIR):
http://ss64.com/nt/for_cmd.html

Espero haberte ayudado.
Un saludo!


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: Eleкtro en 11 Marzo 2014, 02:04 am
Cabe mencionar que el foro está para intentar hayar la respuesta uno mismo a dudas básicas se han solucionado 1.000 veces, usando el buscador del foro...

· Un renombrador en batch para imagenes   (http://foro.elhacker.net/buscador-t389536.0.html)

· Ayuda para renombrar archivos   (http://foro.elhacker.net/buscador-t366280.0.html)

· [BATCH] Cambiar extension a archivos (http://foro.elhacker.net/buscador-t371571.0.html)

· batch - modificar nombres de archivos, solo sacar las letras y dejar numeros   (http://foro.elhacker.net/buscador-t388858.0.html)

Saludos


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: sabeeee en 11 Marzo 2014, 19:10 pm
Aca esta, lo mas sencillo posible
Código
  1. @echo off
  2. :1
  3. set rando=archivo%random%.t01
  4. dir *.t01 /b >%rando%
  5. runpkr00 -d %rando%


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: rochro en 12 Marzo 2014, 16:17 pm
Muchas gracias por el apoyo de uds. He logrado que me ejecute el programa (runpkr) en los archivos que se encuentran en la raiz de la carpeta mas no en los subdirectorios. Quisiera saber que otros comandos tendria que agregar.

Gracias de antemano =)

Código
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. For %%i IN (*.t01) do (call :comando %%i)
  4. :comando
  5. Set file=%~nx1
  6. runpkr00 -d %file%
  7.  


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: Eleкtro en 12 Marzo 2014, 16:51 pm
Vaya, al principio creí que se trataba de un problema de renombramiento de archivos, leí mal, entonces no hagas caso de las urls que te indiqué, ahora te entiendo.

Lo puedes hacer así:

Código
  1. @Echo OFF
  2.  
  3. For /R %%# IN ("*.t01") Do (
  4. Set "file=%%~#"
  5. Call Start /W "runpkr" "runpkr00.exe" -d "%%file%%"
  6. )
  7.  
  8. Pause&Exit

Pero, setear el nombre del archivo en una variable es un paso innecesario, si reálmente no necesitas setear el nombre entonces reemplaza las órdenes que puse dentro del For, por este único comando:

Código
  1. Start /W "runpkr" "runpkr00.exe" -d "%%~#"

Saludos.


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: sabeeee en 12 Marzo 2014, 17:40 pm
Vaya, al principio creí que se trataba de un problema de renombramiento de archivos, leí mal, entonces no hagas caso de las urls que te indiqué, ahora te entiendo.

Lo puedes hacer así:

Código
  1. @Echo OFF
  2.  
  3. For /R %%# IN ("*.t01") Do (
  4. Set "file=%%~#"
  5. Call Start /W "runpkr" "runpkr00.exe" -d "%%file%%"
  6. )
  7.  
  8. Pause&Exit

Pero, setear el nombre del archivo en una variable es un paso innecesario, si reálmente no necesitas setear el nombre entonces reemplaza las órdenes que puse dentro del For, por este único comando:

Código
  1. Start /W "runpkr" "runpkr00.exe" -d "%%~#"

Saludos.

Disculpa, pero el /W es de wait ?, a lo mejor me sirve  mi jeje.


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: Eleкtro en 12 Marzo 2014, 18:28 pm
Disculpa, pero el /W es de wait ?.

si

Cita de: CMD
Código:
WAIT        Iniciar aplicación y esperar a que finalice

saludos!


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: rochro en 12 Marzo 2014, 21:32 pm

Código
  1. Start /W "runpkr" "runpkr00.exe" -d "%%~#"

Saludos.

Muchas Gracias Eleкtro =) Me ayudaste muchísimo, lo que me queda como interrogante es el start /w.

Ahora tengo otro caso. Después de ejecutar el programa runpkr ahora tengo que ejecutar otro programa que es el teqc con el siguiente código:
teqc +nav nombrearchivo0.14n -week semanagps -tr d nombrearchivo.dat> nombrearchivo0.14o

nota:
* en semanagps se tendría que insertar la semana que seria ejem: 1783 (http://gps.topografia.upm.es/www/calactal.htm).
* el nombrearchivo tendria que modificar. ejem: CCCCDDDaA.t01 --> CCCCDDD0.t01 (cambiar los dos ultimos digitos por 0)

Lo que pasa es que lo estoy haciendo por partes para no aturdirme  ;D


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: Eleкtro en 13 Marzo 2014, 06:50 am
nota:
* en semanagps se tendría que insertar la semana que seria ejem: 1783 (http://gps.topografia.upm.es/www/calactal.htm).

¿Pero la semana la introducs tu manuálmente?

Quiero decir, por ejemplo, que si ejecutas el script hoy (13 de marzo) quieres que se tome el día actual de forma automática para convertirlo en la semana equivalente (1783)? o el valor de la semana lo quieres especificar tu de forma manual?

saludos


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: Eleкtro en 13 Marzo 2014, 08:11 am
No se muy bien que quieres ni como lo quieres, pero estoy seguro que este ejemplo que escribí te servirá mucho y podrás adaptarlo a tus necesidades.

PD: Lo escribí en VBS porque en Batch sería algo muy engorroso y no me gusta perder el tiempo con herramientas deficientes :P.

(http://img20.imageshack.us/img20/2532/vu55.png)

Código
  1. ' Instancia del objeto 'FileSystemObject'.
  2. Set FSO = Createobject("Scripting.FileSystemObject")
  3.  
  4. ' Instancia del objeto 'WScript.Shell'.
  5. Set WSS = CreateObject("WScript.Shell")
  6.  
  7. ' Comilla doble, símplemente ara que el código no quede muy feo.
  8. Const Quote = """"
  9.  
  10. ' Las semanas GPS del calendario.
  11. Weeks = Array(Null, _
  12.              1773, 1774, 1775, 1776, 1777, _
  13.              1778, 1779, 1780, 1781, _
  14.              1782, 1783, 1784, 1786, 1786, _
  15.              1787, 1788, 1789, 1790, _
  16.              "Seguir rellenando hasta 1825")
  17.  
  18. ' La semana GPS equivalente a hoy.
  19. Week  = Weeks(DatePart("ww", Now()))
  20.  
  21. ' Directorio de trabajo. (".\" = El directorio actual)
  22. Dir = ".\"
  23.  
  24. ' Iteración de la colección de archivos del directorio de trabajo.
  25. For Each File In FSO.GetFolder(Dir).Files
  26.  
  27.    ' Nombre base.
  28.    Name = FSO.GetBaseName(File)
  29.  
  30.    ' Nombre base con los últimos 2 caracteres reemplazados.
  31.    NameFix = Left(Name, Len(Name) - 2) & "0"
  32.  
  33.    ' Extension.
  34.    Ext  = FSO.GetExtensionName(File)
  35.  
  36.    ' Proceso a ejecutar.
  37.    Proc = "teqc.exe"
  38.  
  39.    ' Argumentos del proceso.
  40.    Args = " +nav "  & Quote & Dir & NameFix & "." & Ext & Quote & _
  41.           " -week " & Quote & Cstr(Week) & Quote  &               _
  42.           " -tr d " & Quote & Dir & Name & ".dat" & Quote
  43.  
  44.    ' Verificación de la información obtenida.
  45.    If Msgbox( _
  46.               "Proceso: " & VBNewLine & _
  47.               Proc & Args             & _
  48.               VBNewLine   & VBNewLine & _
  49.               "Output:  " & VBNewLine & _
  50.               Dir & Name & ".14o",      _
  51.               4 or 48,                  _
  52.               "¿Todo Ok?"               _
  53.    ) = vbNo                             _
  54.    Then
  55.        Wscript.Quit(1) ' Salida fallida.
  56.    End If
  57.  
  58.    ' Ejecución del proceso.
  59.    Set Exec = WSS.Exec(Proc & Args)
  60.  
  61.    ' Obtención de la salida estándar del proceso.
  62.    Output = Exec.StdOut.ReadAll
  63.  
  64.    ' Escritura de la salida obtenida, en un archivo de texto plano.
  65.    FSO.CreateTextFile(Dir & Name & ".14o", True).Write(Output)
  66.  
  67. Next
  68.  
  69. Wscript.Quit(0) ' Salida exitosa.

Saludos


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: rochro en 13 Marzo 2014, 15:34 pm
¿Pero la semana la introducs tu manuálmente?


Por el momento sería así, manualmente, pero lo ideal sería de forma automática. Se que ahora no voy a poder generar ese código para que me salga de forma automática pero por ahora esta bien de manera manual =)

Gracias por todo elektro.


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: Eleкtro en 13 Marzo 2014, 15:57 pm
de nada

lo ideal sería de forma automática.

Entonces acerté con el código VBS ;), ¿te sirvió?

saludos


Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: rochro en 13 Marzo 2014, 21:32 pm
Elektro, estoy agradecida por el apoyo que me brindas. Trato de entender el código que me acabas de alcanzar :D pero creo que en la parte de Weeks(DatePart("ww", Now())) es relacionado con las semanas del año del calendario fijo internacional que es de lunes a domingo (http://www.calendario-365.es/calendario-2014.html) y en el calendario gps es de domingo a sábado.

Como resultado que obtuve al ejecutar el script fue lo siguiente:
1. realiza el procedimiento con todos los archivos en la carpeta raiz y no hace lo mismo con los sub directorios, pero solo tendría que convertir los archivos *.dat
2. al momento de capturar el archivo lo hace con toda su ruta pero para que funcione el teqc solo es indicando el nombre del archivo.

teqc +nav nombrearchi0.14n -week semanagps -tr d nombrearchivo.dat> nombrearchi0.14o

Nuevamente gracias :D