|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Помогите оптимизировать batnik |
|
CMD/BAT - Помогите оптимизировать batnik
|
Новый участник Сообщения: 5 |
обрый день. Я батники никогда не писал, но по работе пришлось написать. Здесь приложу часть своего батника, который, как мне кажется написан очень не оптимально. Прошу подсказать как его можно оптимизировать.
@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 |
|
Отправлено: 01:35, 22-07-2015 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Ingvar2:
Без проверок существования исходного файла и целевого каталога: @echo off setlocal enableextensions enabledelayedexpansion set sSourceFile=out.txt <"%sSourceFile%" ( for /l %%i in (1, 1, 7) do >nul set /p sVar= >nul set /p sVar= ) set sDestFile=%sVar:~7,4%.txt set sContent=%sVar:~26,1%%sVar:~36,1% >"%sDestFile%" echo %sContent% del "%sSourceFile%" >>"log.txt" ( if exist "old\%sDestFile%" ( echo [%sDestFile%] fail. ) else ( >nul move "%sDestFile%" "old\%sDestFile%" echo [%sDestFile%] ok. if "%sContent%" equ "35" ( echo одна запись в лог ) else ( echo другая ) ) ) endlocal exit /b 0 |
|
Отправлено: 05:29, 22-07-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
|
||
Отправлено: 10:08, 22-07-2015 | #3 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать @echo off set "fname=out.txt" set "number=8" for /f "delims=" %%i in ('type "%fname%"^| findstr/n "^"^| findstr/b %number%:^& del "%fname%"') do ( set x=%%i for /f "delims=" %%j in ('cmd/v/c echo "!x:*:=!"') do ( set x=%%~j for /f "tokens=1,2 delims=$" %%k in ('cmd/v/c "echo !x:~7,4!$!x:~26,1!!x:~36,1!"') do ( if exist "old\%%k.txt" ( >"%%k.txt" echo.%%l >>"log.txt" echo %%l fail ) else ( >"old\%%k.txt" echo.%%l >>"log.txt" ( echo %%k ok if "%%l" equ "35" ( echo %%k - %%l ) else ( echo Другая запись с "%%k" и "%%l". ) ) ) ) ) ) exit/b |
Отправлено: 12:11, 22-07-2015 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Ingvar2:
|
||
Отправлено: 13:06, 22-07-2015 | #5 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Iska, лучше сбрасывать предыдущие значения переменной sVar:
. Иначе, если искомая (восьмая) строка пуста, то значением переменной sVar станет именно предыдущее значение, полученное в результате чтения предыдущей непустой строки. |
Отправлено: 16:01, 22-07-2015 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Georgio:
![]() |
|
Отправлено: 19:22, 22-07-2015 | #7 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Спасибо, все получилось
|
Отправлено: 12:12, 23-07-2015 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
MySQL - Помогите оптимизировать запросы! | evpu | Программирование и базы данных | 19 | 14-09-2015 15:34 | |
VBS/WSH/JS - Помогите оптимизировать | nasedkin | Скриптовые языки администрирования Windows | 2 | 22-06-2015 16:52 | |
CMD/BAT - помогите оптимизировать скрипт | dredre | Скриптовые языки администрирования Windows | 1 | 18-09-2011 05:10 | |
помогите оптимизировать систему | BABA ZINA | Выбор отдельных компонентов компьютера и конфигурации в целом | 6 | 07-01-2011 22:19 | |
CMD/BAT - Помогите оптимизировать код | n4! | Скриптовые языки администрирования Windows | 3 | 08-04-2008 05:59 |
|