0 votos

Leer lista de ficheros, sustituyendo cadena y ejecutando función.

Buenas, soy nuevo en esto del DOS, pero me molaría poder hacer funcionar este .bat. Intento hacer lo siguiente:

  • Leer una lista de ficheros *.dat. (hecho)
  • Listarlos en un fichero (hecho)
  • Eliminar la extensión (ahí es donde me he atascado)
  • Ejecutar la función "MasterDump" para cada uno de ellos (un programa ejecutable que tengo en local).

Alguna ayudida? Gracias!!

@echo off
Setlocal EnableDelayedExpansion
echo Inicio
dir /b d:\MasterDump\Input\*.dat > d:\MasterDump\listaModelos.txt
set c=0
set cadorig=".DAT"
set cadsust=

FIND /C ".DAT" listaModelos.txt

for /f "tokens=* delims=" %%i in (listaModelos.txt) do (set ANT=%%i&echo !ANT:%cadorig%=%cadsust%! >>kk_temp.txt)

copy /y kk_temp.txt listaModelos.txt

for /f "tokens=* delims=" %%a in (kk_temp.txt) do (

del /q kk_temp.txt

echo Modelo "%%a" encontrado.
MasterDump /in:d:\MasterDump\Input\ /out:d:\MasterDump\Output\ /model:%%a
echo Modelo "%%a" procesado.
set a/ c+=1

)

echo Proceso terminado. Se procesaron "%c%" archivos.
echo.
echo Pulse alguna tecla para terminar.
echo.
pause>null
exit

1voto

Ahora estoy probando con otras funciones, pero no hay manera de conseguirlo.

@echo off

echo Begin
del /q list.txt
del /q temp.txt

dir /b .\Input\*.dat > .\list.txt
FIND /C ".DAT" list.txt

set C=0

for /f "tokens=* delims=" %%i in (list.txt) do (
   set /a C+=1
   set string=%%i
   set filename=%string:~1,4% 
   echo %filename% >> temp.txt
)

if %C% GTR 0 (
   for /f "tokens=* delims=" %%a in (temp.txt) do (
       echo Record "%%a" found.
       MasterDump /in:d:\MasterDump\Input\ /out:d:\MasterDump\Output\ /model:%%a
       echo Record "%%a" processed.
       echo Process concluded. "%C%" files have been processed.
   )

) else (
   echo No records at all.
   echo Process concluded. "%C%" files have been processed.
)

rem del /q list.txt
rem del /q temp.txt

echo Press any key to continue.
echo.
pause>null
exit

El fichero list.txt se escribe correctamente:

A1234.DAT

B4567.DAT

Pero el primer bucle for debería leerlo y resultar el fichero temp.txt, con este contenido:

1234

4567

...y no hay manera.

¿Alguien me puede ayudar?

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: