Ingvar2
22-07-2015, 01:35
обрый день. Я батники никогда не писал, но по работе пришлось написать. Здесь приложу часть своего батника, который, как мне кажется написан очень не оптимально. Прошу подсказать как его можно оптимизировать.
@echo off
:: имеется файл out.txt с результатом селекта, мне в нем надо оставить только восьмую строчку, к сожалению я так сделать не смог и записал поиск по уникальным данным из восьмой строки с пересохранением строки с найденными данными в тот же файл, но лучше если тут будет жестко прописать оставлять только восьмую строчку
set fname=out.txt
findstr /c:"4 | 1" %fname% >log.tmp
del %fname%
move log.tmp %fname%
:: дальше я начинаю парсить перезаписанный файл out.txt: записываю новый файл xxxx.txt, где xxx равны значениям 8-11 символов единственной строки и записываю в данный файл значения 27го и 37го символов
For /F "Tokens=*" %%A In (out.txt) Do Call :_Func "%%A"
Exit /B 0
:_Func
Set "Str=%~1"
Set "StrNum=%Str:~7,4%"
Set "StrOne=%Str:~26,1%"
Set "StrTwo=%Str:~36,1%"
For /F "Tokens=1 Delims=$" %%A In ("%StrOne%%StrTwo%") Do Echo.%%A>%StrNum%.txt
:: удаляю старый файл
del out.txt
:: проверяю что если в каталоге old отсутствует файл xxxx.txt, то переношу данный файл в этот каталог и записываю результат в лог, а если файл имеется, то только заношу данные в лог
IF not EXIST old\%StrNum%.txt GOTO 1
IF EXIST old\%StrNum%.txt GOTO 2
:1
MOVE %StrNum%.txt old\%StrNum%.txt
echo %StrNum% ok >>log.txt
:: вместо нижеследующей строки по-хорошему, что если в текст в файле = 35 , то должна быть одна запись в лог, а если не равен 35, то другая
echo %StrNum% - %StrOne%%StrTwo% >>log.txt
Exit /B 0
:2
echo %StrNum% fail >>log.txt
Exit /B 0
@echo off
:: имеется файл out.txt с результатом селекта, мне в нем надо оставить только восьмую строчку, к сожалению я так сделать не смог и записал поиск по уникальным данным из восьмой строки с пересохранением строки с найденными данными в тот же файл, но лучше если тут будет жестко прописать оставлять только восьмую строчку
set fname=out.txt
findstr /c:"4 | 1" %fname% >log.tmp
del %fname%
move log.tmp %fname%
:: дальше я начинаю парсить перезаписанный файл out.txt: записываю новый файл xxxx.txt, где xxx равны значениям 8-11 символов единственной строки и записываю в данный файл значения 27го и 37го символов
For /F "Tokens=*" %%A In (out.txt) Do Call :_Func "%%A"
Exit /B 0
:_Func
Set "Str=%~1"
Set "StrNum=%Str:~7,4%"
Set "StrOne=%Str:~26,1%"
Set "StrTwo=%Str:~36,1%"
For /F "Tokens=1 Delims=$" %%A In ("%StrOne%%StrTwo%") Do Echo.%%A>%StrNum%.txt
:: удаляю старый файл
del out.txt
:: проверяю что если в каталоге old отсутствует файл xxxx.txt, то переношу данный файл в этот каталог и записываю результат в лог, а если файл имеется, то только заношу данные в лог
IF not EXIST old\%StrNum%.txt GOTO 1
IF EXIST old\%StrNum%.txt GOTO 2
:1
MOVE %StrNum%.txt old\%StrNum%.txt
echo %StrNum% ok >>log.txt
:: вместо нижеследующей строки по-хорошему, что если в текст в файле = 35 , то должна быть одна запись в лог, а если не равен 35, то другая
echo %StrNum% - %StrOne%%StrTwo% >>log.txt
Exit /B 0
:2
echo %StrNum% fail >>log.txt
Exit /B 0