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

Ответить
Аватара пользователя
nfs911

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

Сообщение nfs911 »

Всем привет!

Недоработает код,подправьте что не так или предложите аналог



Код:

Код: Выделить всё

@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

Благодарю!
Аватара пользователя
Iska

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

Сообщение Iska »

nfs911, чтобы «передоработать»


читать дальше »



Цитата nfs911:



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








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

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

Сообщение Iska »

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
)

Вы обязательно[/i] зациклитесь при невыполнении условия. Может быть, подразумевалось «goto :next»?



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

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

Сообщение nfs911 »

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. Здесь:
CMD/BAT - [решено] присвоение результата findstr к переменной




1.странно как я умудрился пропустить

2.спасибо,буду знать и наконец пойму некоторый код

3.да я ошибся,next

ps:+мешало /i в if (видимо надо перед not,но в люом случае можно обойтись т.к. регистр всегда один)

и спс за трюк с type



я конечно изобретаю велосипед но

1.изучаю cmd

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

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

Сообщение Iska »

Цитата nfs911:



вот как должно быть(показательный вариант )))
CMD/BAT - [решено] присвоение результата findstr к переменной




Повторяю: Ваш код явно перегружен. Опишите техзадание словами.




Цитата nfs911:



Что значит ^ перед | findstr.exe
CMD/BAT - [решено] присвоение результата findstr к переменной




Экранирование символа конвейера «|», дабы он был передан в дочерний процесс, а не был воспринят интерпретатором для текущей команды.
Аватара пользователя
nfs911

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

Сообщение nfs911 »

DISM


1)рапаковывает все обновы в папке с папками итп (из MSU в CAB)

2)удаляем исходник(MSU)

2)потом проверяет их на применимость к монтированому wim образу и записывает результат в Check.txt

3)потом считывая результат - если не применим то в одну папку перемещаем (тамже где и само обновление т.е. для каждой папки будет своя папка),если уже установлен то в другую папку,а если всё ок то отставляем как есть

и переходим к следующему файлу
Ответить

Вернуться в «Скриптовые языки администрирования Windows»