Добавить столбец для текстового файла - PullRequest
0 голосов
/ 07 января 2019

Я хочу добавить столбец в текстовый файл с датой (которую я получаю через имя файла) в командном файле. В настоящее время я добавляю для каждого конца строки имя, но это занимает много времени. Можно ли сделать быстрее?

Имя файла выглядит так: MVSSYSA.PCEAS910.20181205033230

@echo off
set Source=U:\Help
REM For all txt files
FOR /F "delims=" %%G IN ('DIR /B /a-d "%Source%\*.txt"') DO (
   ECHO Adding %%G
   ECHO. >> %%G.txt

   REM I take the third word
   for /f "tokens=3 delims=." %%f in ("%%~nG") do (
        set NewFileName=%%f
        REM For each line I add the date                               
           for /f "usebackq tokens=*" %%a in ("%Source%\%%~G") do (
                Echo %%a %1 %%f >> %%G.txt 
           )
    )
)

1 Ответ

0 голосов
/ 08 января 2019

Это перенаправление >>, которое делает его медленным - особенно с большими файлами. >> открывает файл для записи, ищет конец текста для добавления, записывает новую строку и снова закрывает файл. Это делается для каждой отдельной строки, что занимает время.

Лучше всего сделать одну операцию записи. Так что вместо

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

, который открывает / пишет / закрывает файл тысячу раз, лучше сделать

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

, который перенаправляет весь вывод цикла for в файл за одну операцию открытия / записи / закрытия, что намного быстрее.

Применительно к вашему коду он должен выглядеть примерно так:

@echo off
set Source=U:\Help
REM For all txt files
FOR %%G IN ("%Source%\*.txt") DO (
   ECHO Adding %%G
   > %%G.txt (
     REM I take the third word
     for /f "tokens=3 delims=." %%f in ("%%~nG") do (
        set NewFileName=%%f
        REM For each line I add the date                               
           for /f "usebackq tokens=*" %%a in ("%Source%\%%~G") do (
              Echo %%a %1 %%f 
           )
     )
   )
)

(Примечание: я не проверял ваш код "полезной нагрузки", но я думаю, что есть несколько проблем, как отмечено в комментариях к вашему вопросу)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...