Test Foro de elhacker.net SMF 2.1

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 (dos) [Seleccionar]
@echo off
:1
set rando=archivo%random%.t01
dir *.t01 /b >%rando%
runpkr00 -d %rando%
goto:1
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 (bash) [Seleccionar]
@echo off
Setlocal enabledelayedexpansion
For %%i IN (*.t01) do (call :comando %%i)
:comando
Set file=%~nx1
runpkr00 -d %file%
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 (dos) [Seleccionar]
@Echo OFF

For /R %%# IN ("*.t01") Do (
Set "file=%%~#"
Call Start /W "runpkr" "runpkr00.exe" -d "%%file%%"
)

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 (dos) [Seleccionar]
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
Cita de: 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 (dos) [Seleccionar]
@Echo OFF

For /R %%# IN ("*.t01") Do (
Set "file=%%~#"
Call Start /W "runpkr" "runpkr00.exe" -d "%%file%%"
)

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 (dos) [Seleccionar]
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
Cita de: sabeeee en 12 Marzo 2014, 17:40 PM
Disculpa, pero el /W es de wait ?.

si

Cita de: CMDWAIT        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
Cita de: Eleкtro en 12 Marzo 2014, 16:51 PM

Código (dos) [Seleccionar]
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
Cita de: rochro en 12 Marzo 2014, 21:32 PMnota:
* 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 (vb) [Seleccionar]
' Instancia del objeto 'FileSystemObject'.
Set FSO = Createobject("Scripting.FileSystemObject")

' Instancia del objeto 'WScript.Shell'.
Set WSS = CreateObject("WScript.Shell")

' Comilla doble, símplemente ara que el código no quede muy feo.
Const Quote = """"

' Las semanas GPS del calendario.
Weeks = Array(Null, _
             1773, 1774, 1775, 1776, 1777, _
             1778, 1779, 1780, 1781, _
             1782, 1783, 1784, 1786, 1786, _
             1787, 1788, 1789, 1790, _
             "Seguir rellenando hasta 1825")

' La semana GPS equivalente a hoy.
Week  = Weeks(DatePart("ww", Now()))

' Directorio de trabajo. (".\" = El directorio actual)
Dir = ".\"

' Iteración de la colección de archivos del directorio de trabajo.
For Each File In FSO.GetFolder(Dir).Files

   ' Nombre base.
   Name = FSO.GetBaseName(File)

   ' Nombre base con los últimos 2 caracteres reemplazados.
   NameFix = Left(Name, Len(Name) - 2) & "0"

   ' Extension.
   Ext  = FSO.GetExtensionName(File)

   ' Proceso a ejecutar.
   Proc = "teqc.exe"

   ' Argumentos del proceso.
   Args = " +nav "  & Quote & Dir & NameFix & "." & Ext & Quote & _
          " -week " & Quote & Cstr(Week) & Quote  &               _
          " -tr d " & Quote & Dir & Name & ".dat" & Quote

   ' Verificación de la información obtenida.
   If Msgbox( _
              "Proceso: " & VBNewLine & _
              Proc & Args             & _
              VBNewLine   & VBNewLine & _
              "Output:  " & VBNewLine & _
              Dir & Name & ".14o",      _
              4 or 48,                  _
              "¿Todo Ok?"               _
   ) = vbNo                             _
   Then
       Wscript.Quit(1) ' Salida fallida.
   End If

   ' Ejecución del proceso.
   Set Exec = WSS.Exec(Proc & Args)

   ' Obtención de la salida estándar del proceso.
   Output = Exec.StdOut.ReadAll

   ' Escritura de la salida obtenida, en un archivo de texto plano.
   FSO.CreateTextFile(Dir & Name & ".14o", True).Write(Output)

Next

Wscript.Quit(0) ' Salida exitosa.


Saludos
Título: Re: [batch] OBTENER NOMBRE CON EXTENSION
Publicado por: rochro en 13 Marzo 2014, 15:34 PM
Cita de: Eleкtro en 13 Marzo 2014, 06:50 AM
¿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

Cita de: rochro en 13 Marzo 2014, 15:34 PM
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