2016-09-12 3 views
0

Я пишу пакетный скрипт для преобразования текстового файла с фиксированной шириной в формат .csv. Вот что я написал до сих пор:Windows Batch script * (star) читать как текст?

@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 

Проблема заключается в том, что, когда я запускаю его, программа не была завершена, и выходы «Система не может найти файл HRV * .txt». Затем я изменил цикл для

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

Но ошибка просто меняется на «Система не может найти файл * .txt»

Кажется, что звезда * читается как текст? это имеет какое-то отношение к «токенам +»? Как я могу сделать это так, чтобы сценарий запускался в любом файле, который начинается с ВСР?

ответ

4

for /f ожидает одно имя файла и не может использовать подстановочные знаки. Используйте другой равнине for вокруг:

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

кстати: ваш способ перенаправления очень медленно. Файл назначения открывается, одна строка записывается и файл снова закрывается. Открытие и закрытие файла занимает много времени. Вы можете избежать этого, открыв и закрыв его только один раз. Вместо того, чтобы:

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

, который требуется около 27 секунд, сделайте следующее:

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

, который требуется около 170 мс . (Ymmv - время зависит от вашей компьютерной системы)

+0

Кажется, вы были быстрее меня ... ;-) +1 – aschipfl

Смежные вопросы