Пакетный файл, как использовать команду findstr, чтобы найти текст и сделать его переменной?

Я хочу знать, как использовать команду Findstr, чтобы найти текст в файле и сделать его переменной здесь, что я пробовал:

@echo off
for /F "delims=" %%a in ('findstr /I /m "100" Config.dat') do set "Variable=%%a"
cls 
if %errorlevel% == 0 (
goto found
) else (
goto nope
)
:found
cls
echo founded ! %Variable%
pause
exit
:nope
cls
echo not found!
pause
exit

Хорошо, я объясняю: во второй строке число «100» — это то, что я хочу найти, а «Config.dat» — это файл, в котором есть число 100 и некоторые другие числа, а «переменная» — это имя переменной, которую я хочу сохранить в нем 100.

Проблема в том, что когда он нашел число 100, он переходит к функции «найдено» и отображает «Найдено! 100», но когда он не найден, он также переходит к функции «найден» и отображает только найдено! без 100. Так почему, когда он не основан, он переходит к «найден», мне нужно, чтобы он переходил в «нет».

Поэтому я надеюсь, что вы, ребята, объясните мне, если я сделал что-то не так, и спасибо!


person Sheep1Man    schedule 10.02.2018    source источник
comment
Для начала вам нужно удалить опцию /m в вашей команде findstr. Также нет необходимости в опции /I, так как число не имеет регистра. И поскольку вы уже знаете номер, нет необходимости помещать вашу команду в цикл for.   -  person Compo    schedule 10.02.2018
comment
Но если я удалю for, повлияет ли это на переменную? (Он не будет хранить 100 или число в переменной)   -  person Sheep1Man    schedule 10.02.2018
comment
Вам просто нужно использовать Set "Variable=100"!   -  person Compo    schedule 10.02.2018
comment
покажи свой конфиг файл (хотя бы первые - скажем - три строчки.   -  person Stephan    schedule 10.02.2018
comment
Я знаю, что могу создать файл только с номером 100 и использовать такую ​​команду: echo 100 >File.dat#set /p Var=<File.dat, но я хочу создать один файл, содержащий всю конфигурацию программы.   -  person Sheep1Man    schedule 10.02.2018
comment
что-то вроде этого?   -  person Stephan    schedule 10.02.2018
comment
В яблочко! хранение более одного значения в одном файле Спасибо!!   -  person Sheep1Man    schedule 10.02.2018


Ответы (1)


Это связано с тем, что for /F вызывает команду в автономном cmd.exe процессе и не возвращает уровень ошибки в контекст вызывающего:

@echo off

rem drop last error level
type nul>nul

for /F "usebackq delims=" %%a in (`cmd.exe /C @exit /b 123`) do rem
echo ERRORLEVEL=%ERRORLEVEL%

-

ERRORLEVEL=0

Если вы хотите просто загрузить значения конфигурации в переменные среды, вам не нужно ничего искать. Просто создайте для этого отдельный файл конфигурации.

config.vars

# loads by cmd.exe script

aaa=111
"bbb=111 222"
/A ccc=1+1
"ddd=%bbb% & 333"

load_config.bat

@echo off

for /F "usebackq eol=# tokens=* delims=" %%i in ("config.vars") do (
  call set %%i
)
person Andry    schedule 10.02.2018