[batch] OBTENER NOMBRE CON EXTENSION

Iniciado por rochro, 10 Marzo 2014, 22:11 PM

0 Miembros y 2 Visitantes están viendo este tema.

Eleкtro

#10
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.



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








rochro

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.

Eleкtro

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








rochro

#13
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