Windows Batch script*(star) leer como texto?



csv batch-file (1)

Estoy escribiendo un script por lotes para convertir un archivo de texto de ancho fijo al formato .csv. Esto es lo que he escrito hasta ahora:

@echo off
setlocal enabledelayedexpansion


    for /F "tokens=*" %%A in (HRV*.txt) do (
    set var=%%A
    set mer=!var:~6,11!
    set cr=!var:~18,19!

    set dt=!var:~42,30!
    set aa=!var:~72,30!
    set ab=!var:~102,30!
    set ac=!var:~132,15!

    set ad=!var:~147,30!
    set ae=!var:~177,30!

    set af=!var:~283,36!

    set ag=!var:~318,3!
    set ah=!var:~329,7!
    set ai=!var:~337,17!
    set aj=!var:~442,2!
    set ak=!var:~460,15!
    set al=!var:~475,2!
    set am=!var:~482,15!

    set y=!mer!.!cr!,"!dt!","!aa!","!ab!","!ac!","!ad!","!ae!",="!af!","!ag!",="ah","ai","aj",="ak","al",="am"
    echo !y!>> converted.csv
    )

pause

El problema es que cuando lo ejecuto, el programa no se completa y muestra "El sistema no puede encontrar el archivo HRV * .txt". Luego cambié de bucle a

for /F "tokens=*" %%A in (*.txt) do ( ...

Pero el error simplemente cambió a "El sistema no puede encontrar el archivo * .txt"

Parece que la estrella * se lee como texto? ¿Tiene esto algo que ver con "tokens + *"? ¿Cómo puedo hacerlo para que la secuencia de comandos se ejecute en cualquier archivo que comience con HRV?


for /f espera un solo nombre de archivo y no es capaz de usar comodines. Use otra llanura for alrededor:

for %%X in (HRV*.txt) do (
  for /F "tokens=*" %%A in (%%X) do (
    ... etc. etc.
  )
)

por cierto: tu forma de redirigir es muy lenta. El archivo de destino se abre, se escribe una línea y el archivo se cierra nuevamente. Abrir y cerrar un archivo lleva mucho tiempo. Puede evitarlo abriéndolo y cerrándolo solo una vez. En lugar de:

for /l %%a in (1,1,10000) do (
  echo something>>file.txt
)

que necesita unos 27 segundos, hazlo:

(
  for /l %%a in (1,1,10000) do (
    echo something
  )
)>file.txt

que necesita alrededor de 170 ms . (Ymmv - veces depende de su sistema informático)





fixed-width