|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] параметры цикла for для построчного анализа текстового файла?! |
|
CMD/BAT - [решено] параметры цикла for для построчного анализа текстового файла?!
|
Пользователь Сообщения: 58 |
Профиль | Отправить PM | Цитировать Добрый день!
Есть необходимость построчно проанализировать содержимое текстового файла. Никак не могу определиться с синтаксисом. @for /f "tokens=*" %%A in (c:\text.txt) do @echo %%A – не работает |
|
Отправлено: 15:52, 04-02-2008 |
Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
megaloman, спасибо за подробное объяснение вашего кода! Я в CMD новичок, прогую на других языках, CMD дается тяжелее из-за сильных различий по отношению к другим языкам. Несколько вопросов по поводу вашего кода. Поясните пожалуйста, для чего нужно два знака процента у переменных: Цитата megaloman:
Не понял для чего нужна тильда: Цитата megaloman:
И зачем нужно Цитата megaloman:
|
||||
Отправлено: 14:32, 28-07-2017 | #41 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Burning Hell:
Цитата Burning Hell:
|
||
Отправлено: 14:41, 28-07-2017 | #42 |
Ветеран Сообщения: 2727
|
Профиль | Отправить PM | Цитировать Цитата Burning Hell:
@Echo Off cls Call :get_params_from_main_config "D:\codes\common\init_environment.sas" ""lasr_port" "lasr_host"" pause GoTo :Eof :get_params_from_main_config Echo %1 Echo %2 Echo: Echo %~2 For %%a In (%~2) Do Echo Call :Ident %%a "%%i" "%%j" "%%k" GoTo :Eof Зачем нужна ~
Проделайте команду For /? >D:\_For.help и почитайте файл D:\_For.help Там ближе к концу это описано.
Смысл совпадает как для переменных цикла, так и для аргументов подпрограммы |
|
------- Последний раз редактировалось megaloman, 28-07-2017 в 15:36. Отправлено: 15:21, 28-07-2017 | #43 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 15:40, 28-07-2017 | #44 |
Ветеран Сообщения: 2727
|
Профиль | Отправить PM | Цитировать Iska, там эхо для иллюстрации работы For, реального вызова :Ident нет
|
------- Отправлено: 15:52, 28-07-2017 | #45 |
Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 16:13, 28-07-2017 | #46 |
Ветеран Сообщения: 2727
|
Профиль | Отправить PM | Цитировать Burning Hell,
Я тестировал на Вашем примере, для точек и минусов проблем нет
%global vaRepLib vaRepLib lasr_port lasr_engine lasr_tag lasr_host lasr_signer lasr_options metaport metaprotocol metarepository lasr_sig_files_path; %let vaRepLib = lasrlib; %let lasr_port = 2289; %let lasr_engine = sasiola; %let lasr_tag = va_pub; %let lasr_host = sas-vaar.dev.rnw; %let lasr_signer = %str("http://sas-metadata.dev.rnw:85/SASLASRAuthorization"); %let lasr_options = %str(tag=&lasr_tag port=&lasr_port host="&lasr_host" signer=&lasr_signer); Пытался понять, где у Вас не получалось. Слегка для себя модернизировал Ваш (после Iska и вставки моей процедуры) код. Естественно, полноценно тестировать не в состоянии, нет sas.exe. Работает.
@Echo Off cls Set /A Iter=0 :Begin If %Errorlevel%==2 GoTo :Eof Set /A Iter+=1 Echo +++ Begin %Iter% Iteration Set "DD=%Date:~0,2%" set "MM=%Date:~3,2%" set "YYYY=%Date:~6,4%" Set "HH=%Time: =0%" Set "MN=%HH:~3,2%" Set "SS=%HH:~6,2%" Set "HH=%HH:~0,2%" Set "FMT=AM" If %HH% GTR 12 ( Set "FMT=PM" Set /A HH=%HH%-12+100 ) If %HH% GTR 100 Set "HH=%HH:~1,2%" If %HH%==00 Set "HH=12" Set "LogFile=D:\logs\check_va_lasr_status_%YYYY%-%MM%-%DD%__%HH%.%MN%.%SS% %FMT%.log" Call "D:\SAS\sas.exe" -sysin "D:\codes\check_va_lasr\check_va_lasr_status.sas" -log "%LogFile%" Call :get_params_from_main_config "D:\codes\common\init_environment.sas" ""lasr_port" "lasr_host"" >nul 2>&1 findstr.exe /i /l /c:"error" /c:"connection" /c:"lasr" /c:"%lasr_port%" /c:"%lasr_host%" "%LogFile%" && ( Call "D:\SAS\sas.exe" -sysin "D:\codes\check_va_lasr\check_lasr_log_and_run.sas" -nolog CHOICE /C YN /T 15 /D N /M "Iteration %Iter% finished with Errors. Y - Continue, N - Cancel." Echo: GoTo :Begin ) || ( Echo +++ Iteration %Iter% finished successfully GoTo :Eof ) GoTo :Eof :get_params_from_main_config Set "Key=let" FOR /F "usebackq tokens=1,2,3 delims==; " %%i IN (`more %1 2^>nul`) DO ( For %%a In (%~2) Do Call :Ident %%a "%%i" "%%j" "%%k" ) GoTo :Eof :Ident If /I %2=="%Key%" If /I %1==%3 Set "%~1=%~4" GoTo :Eof |
------- Последний раз редактировалось megaloman, 28-07-2017 в 19:16. Отправлено: 18:17, 28-07-2017 | #47 |
Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 15:09, 07-08-2017 | #48 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Burning Hell:
Цитата Burning Hell:
type "%full_log_path%" | >nul 2>&1 findstr.exe /i /r /c:"word1.*word2.*word3" /c:"word1.*word3.*word2" /c:"word2.*word1.*word3" /c:"word2.*word3.*word1" /c:"word3.*word1.*word2" /c:"word3.*word2.*word1" && echo Found || echo Not found Посему проще будет так: set /a bFound = 0 type "%full_log_path%" | >nul 2>&1 find.exe /i "word1" && set /a bFound = 1 type "%full_log_path%" | >nul 2>&1 find.exe /i "word2" && set /a bFound = 1 type "%full_log_path%" | >nul 2>&1 find.exe /i "word3" && set /a bFound = 1 if "%bFound%" equ "1" ( echo Found ) else ( echo Not found ) set /a bFound = 0 type "%full_log_path%" | >nul 2>&1 find.exe /i "word1" && ( type "%full_log_path%" | >nul 2>&1 find.exe /i "word2" && ( type "%full_log_path%" | >nul 2>&1 find.exe /i "word3" && set /a bFound = 1 ) ) if "%bFound%" equ "1" ( echo Found ) else ( echo Not found ) P.S. Интересно, то будет в этом случае: Опять же, не проверялось. |
||
Отправлено: 16:07, 07-08-2017 | #49 |
Пользователь Сообщения: 79
|
Профиль | Отправить PM | Цитировать Iska, спасибо...Была у меня мысль, что придется для каждого слова отдельный findstr писать, но думал, что можно как-то соптимизировать. Ладно, это не критично. Еще раз спасибо.
|
Отправлено: 16:12, 07-08-2017 | #50 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Создание текстового файла при условии его отсутствия в папке | spilberg | Скриптовые языки администрирования Windows | 1 | 12-07-2009 15:58 | |
[решено] Чтение текстового файла с неизвестным именем | ZeroCrash | AutoIt | 4 | 01-07-2009 19:03 | |
[решено] Заполнение формы на сайте, но с данными из текстового файла | ZeroCrash | AutoIt | 2 | 24-06-2009 11:04 | |
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. | Nun-Nun | Скриптовые языки администрирования Windows | 6 | 13-05-2009 13:28 | |
CMD/BAT - [решено] вывод текстового файла на экран cmd | idsp | Скриптовые языки администрирования Windows | 6 | 06-04-2009 07:18 |
|