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
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!
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
Aca esta, lo mas sencillo posible
@echo off
:1
set rando=archivo%random%.t01
dir *.t01 /b >%rando%
runpkr00 -d %rando%
goto:1
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 =)
@echo off
Setlocal enabledelayedexpansion
For %%i IN (*.t01) do (call :comando %%i)
:comando
Set file=%~nx1
runpkr00 -d %file%
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í:
@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:
Start /W "runpkr" "runpkr00.exe" -d "%%~#"
Saludos.
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í:
@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:
Start /W "runpkr" "runpkr00.exe" -d "%%~#"
Saludos.
Disculpa, pero el /W es de wait ?, a lo mejor me sirve mi jeje.
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!
Cita de: Eleкtro en 12 Marzo 2014, 16:51 PM
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
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
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)
' 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
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.
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
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