Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] присвоение результата findstr к переменной

Ответить
Настройки темы
CMD/BAT - [решено] присвоение результата findstr к переменной

Старожил


Сообщения: 151
Благодарности: 4

Профиль | Отправить PM | Цитировать


Всем привет!
Недоработает код,подправьте что не так или предложите аналог
Код: Выделить весь код
@ECHO OFF

FOR /F "tokens=*" %%a ('findstr.exe /r /x /c:"Возможность применения :.*" Check.txt') DO (
set a=%%a
if not /i "%a%" == "Возможность применения : Да" goto move1
goto next1
)
:next1
FOR /F "tokens=*" %%b ('findstr.exe /r /x /c:"Состояние :.*" Check.txt') DO (
set b=%%b
if not /i "%b%" == "Состояние : Отсутствует" goto move2
goto next1
)

:move1
echo move1

:move2
echo move2

:next
ECHO Нажмите любую кнопку для выхода
PAUSE>nul
Благодарю!

Отправлено: 13:51, 31-07-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


nfs911, чтобы «передоработать»
читать дальше »
Цитата nfs911:
Недоработает »

код, как минимум, потребен файл «Check.txt». Выложите его в архиве.

Отправлено: 17:10, 31-07-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 151
Благодарности: 4

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt Check.txt
(55 байт, 16 просмотров)

Iska, прикрепил

Отправлено: 18:10, 31-07-2013 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


1. Пропущены ключевые слова «in» в «for /f …».
2. «%a%» и «%b%» раскрываются при входе в скобки «(…)». Нужно использовать отложенное раскрытие: «setlocal enableextensions enabledelayedexpansion» в начале пакетного файла, и «!a!»/«!b!» внутри скобок.
3. Здесь:
Код: Выделить весь код
:next1
for /f "tokens=*" %%i in ('type "Check.txt" ^| findstr.exe /r /x /c:"Состояние :.*"') DO (
if not /i "%%i" == "Состояние : Отсутствует" goto :move2
goto next1
)
Вы обязательно зациклитесь при невыполнении условия. Может быть, подразумевалось «goto :next»?

Многое излишне, код явно перегружен. Мне вообще весьма непонятна логика. Опишите ТЗ словами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:54, 31-07-2013 | #4


Старожил


Сообщения: 151
Благодарности: 4

Профиль | Отправить PM | Цитировать


Iska, благодарю
вот как должно быть(показательный вариант )))

Код: Выделить весь код
@ECHO OFF
for /f "tokens=*" %%a in ('type "Check.txt" ^| findstr.exe /r /x /c:"Возможность применения :.*"') DO (
set str1=%%a
if not "%%a" == "Возможность применения : Да" goto move1
goto next1
)
:next1
for /f "tokens=*" %%b in ('type "Check.txt" ^| findstr.exe /r /x /c:"Состояние :.*"') DO (
set str2=%%b
if not "%%b" == "Состояние : Отсутствует" goto move2
goto next
)

:move1
echo move1
echo %str1%
goto next
pause

:move2
echo move2
echo %str2%
goto next
pause

:next
ECHO Нажмите любую кнопку для выхода
PAUSE>nul
Вопрос:
Что значит ^ перед | findstr.exe
Цитата Iska:
1. Пропущены ключевые слова «in» в «for /f …».
2. «%a%» и «%b%» раскрываются при входе в скобки «(…)». Нужно использовать отложенное раскрытие: «setlocal enableextensions enabledelayedexpansion» в начале пакетного файла, и «!a!»/«!b!» внутри скобок.
3. Здесь: »
1.странно как я умудрился пропустить
2.спасибо,буду знать и наконец пойму некоторый код
3.да я ошибся,next
ps:+мешало /i в if (видимо надо перед not,но в люом случае можно обойтись т.к. регистр всегда один)
и спс за трюк с type

я конечно изобретаю велосипед но
1.изучаю cmd
2.я знаю что делает мой код(чужой код не известен)

Последний раз редактировалось nfs911, 31-07-2013 в 20:06.


Отправлено: 20:00, 31-07-2013 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата nfs911:
вот как должно быть(показательный вариант ))) »
Повторяю: Ваш код явно перегружен. Опишите техзадание словами.

Цитата nfs911:
Что значит ^ перед | findstr.exe »
Экранирование символа конвейера «|», дабы он был передан в дочерний процесс, а не был воспринят интерпретатором для текущей команды.

Отправлено: 12:50, 01-08-2013 | #6


Старожил


Сообщения: 151
Благодарности: 4

Профиль | Отправить PM | Цитировать


DISM
1)рапаковывает все обновы в папке с папками итп (из MSU в CAB)
2)удаляем исходник(MSU)
2)потом проверяет их на применимость к монтированому wim образу и записывает результат в Check.txt
3)потом считывая результат - если не применим то в одну папку перемещаем (тамже где и само обновление т.е. для каждой папки будет своя папка),если уже установлен то в другую папку,а если всё ок то отставляем как есть
и переходим к следующему файлу

Отправлено: 21:43, 01-08-2013 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] присвоение результата findstr к переменной

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
CMD/BAT - [решено] findstr помощь firstarey Скриптовые языки администрирования Windows 26 12-10-2013 12:17
CMD/BAT - Присвоение значения переменной starav Скриптовые языки администрирования Windows 1 30-05-2013 09:23
CMD/BAT - [решено] В переменной содержится имя переменной opravdin Скриптовые языки администрирования Windows 3 28-01-2013 11:11
CMD/BAT - [решено] Присвоение переменной папкам уровнями выше dorosa Скриптовые языки администрирования Windows 4 13-10-2012 19:47




 
Переход