|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] При передачи данных из цикла For в подпрограмму происходит 2х кратный вызов последней |
|
CMD/BAT - [решено] При передачи данных из цикла For в подпрограмму происходит 2х кратный вызов последней
|
Новый участник Сообщения: 36 |
Добрый день, в процессе написания скрипта для удаления ПО столкнулся с такой проблемой: при передачи данных из цикла For в подпрограмму происходит 2х кратный вызов последней и как следствие остается 2 записи в логах.
cls set X=%~dp0 For /F "tokens=2 delims==" %%A In ('WMIC PRODUCT Where "Name LIKE 'Adobe%% Reader%%'" GET Name^, IdentifyingNumber /value^|Findstr "="') Do (set Arg=%%A & Call :De1 Arg) :De1 if %Arg:~0,1% neq { (echo %Arg% >> "%X%Insid.txt") else ( START /WAIT MsiExec.exe /X%Arg% /qn /norestart) Exit /B Отсюда 2 вопроса: 1. Почему так происходит. 2. Как это исправить (обойти). |
|
Отправлено: 19:12, 29-03-2016 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать Перед :De1 вставить строку GoTo :Eof либо Exit, если надо, с ключом.
(1) Инструкции обрабатываются последовательно. :De1 это метка сначала в for вы вызываете кусок кода по метке :De1 как процедуру. После выполнения For переходим к выполнению следующей инструкции. Метка она и в Африке метка и никак не влияет на выполнение программы, если на неё не ссылаться. Поэтому при окончании кода головной части батника отделите её от процедуры GoTo :Eof либо Exit И вообще, каждую процедуру, если их несколько, надо отделять от последующей, GoTo :Eof либо Exit, так как см. (1) Полезно еще прочитать хелп (в командной строке Call /?) |
------- Последний раз редактировалось megaloman, 29-03-2016 в 20:33. Отправлено: 20:00, 29-03-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Для надёжного разбора вывода команды "WMIC" лучше использовать такой код:
@echo off for /f "tokens=1,2 delims==" %%A in (' wmic product where "Name like 'Adobe%% Reader%%'" get Name^, IdentifyingNumber /value ') do ( for /f "delims=" %%C in ("%%B") do ( if /i "%%A" neq "IdentifyingNumber" ( echo %%C>>"%~dp0Insid.txt" ) else ( start /wait MsiExec.exe /x%%C /qn /norestart ) ) ) exit /b |
Отправлено: 20:56, 29-03-2016 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] При копировании не происходит преобразовании из переменной в путь назначения | 8ash8 | Скриптовые языки администрирования Windows | 2 | 21-03-2016 15:36 | |
Вопрос - [решено] Вопрос по сетевой безопасности при передачи данных в сети Интернет. | AtosPolon | Защита компьютерных систем | 6 | 24-11-2014 20:16 | |
VBS/WSH/JS - Экспорт данных их Excel в Sql Server без цикла. VBS | LilLoco | Программирование и базы данных | 2 | 19-11-2012 12:55 | |
VBS/WSH/JS - [решено] Проблема передачи параметров в скрипт при запуске из ярлыка | gora | Скриптовые языки администрирования Windows | 1 | 08-09-2011 13:26 | |
Скорость передачи данных в интернет при XP-SP2 | rik_ | Microsoft Windows 2000/XP | 13 | 27-11-2006 19:54 |
|