PDA

Показать полную графическую версию : [решено] Проверить запись в BAT файле


RS_WOOLF
05-03-2021, 09:43
Всем привет.

Новичок в Батниках, поэтому такой вопрос.

Есть файл selhdw.dll
В нем есть строка
SET SST_....

Необходимо с помощью батника проверить наличие записи которое идет после SET SST...

Если например
SET SST_BRM то запускать файл 1
если
SET SST_CDM то запускать файл 2

Подскажите пожалуйста как это записать?
Спасибо большое.

Elven
05-03-2021, 10:11
Очень приблизительный и кривой вариант (на коленке писал, опять винды нет под рукой):
findstr -C:"SET SST_BRM" selhdw.dll
if ERRORLEVEL 0 (
findstr -C:"SET SST_CDM"
if ERRORLEVEL 0 (
echo not found
) else (
echo start file2.exe
)
) else (
echo start file1.exe
)

Ну и да, сейчас не я так кто-нибудь другой (скорей всего Iska) задаст справедливые вопросы о структуре файла, кодировке, концах строк, сколько раз может значение повторяться в файле, почему не posh, ну и наконец затребуют либо сам файл либо как минимум фрагмент с искомой строчкой (но лучше файл, мне вот очень интересно посмотреть на dll которая просто так берет и читается).

RS_WOOLF
05-03-2021, 10:19
Файл, очень простой =) прилагаю,переименовал в txt

Elven
05-03-2021, 11:41
Ну тогда если этот параметр гарантированно не повторяется (т.е. в одном файле не будет и SET SST_BRM, и SET SST_CDM, то вариант во втором посте должнон худо-бедно сработать.

RS_WOOLF
05-03-2021, 12:02
Ну тогда если этот параметр гарантированно не повторяется (т.е. в одном файле не будет и SET SST_BRM, и SET SST_CDM, то вариант во втором посте должнон худо-бедно сработать. »

Попробовал, вот что вышло. прилагаю скрин 163924

RS_WOOLF
05-03-2021, 12:44
Вроде, разобрался.
Сделал вот так

findstr -C:"SET SST_CDMTYPE=BRM_SWAPPED" C:\selhdw.dll
echo %ERRORLEVEl%
if "%ERRORLEVEL%"=="0" start D:\file1.txt

findstr -C:"SET SST_CDMTYPE=MDM" C:\selhdw.dll
echo %ERRORLEVEl%
if "%ERRORLEVEL%"=="0" start D:\file2.txt

Iska
05-03-2021, 13:47
@echo off
setlocal enableextensions enabledelayedexpansion

type "C:\selhdw.dll" | findstr.exe /l /c:"SET SST_CDMTYPE=BRM_SWAPPED" && start "" "D:\file1.txt"
type "C:\selhdw.dll" | findstr.exe /l /c:"SET SST_CDMTYPE=MDM" && start "" "D:\file2.txt"

endlocal
exit /b 0

Хотя выше Вы писали про другое условие:
Если например
SET SST_BRM то запускать файл 1
если
SET SST_CDM то запускать файл 2 »

RS_WOOLF
05-03-2021, 14:17
@echo off
setlocal enableextensions enabledelayedexpansion
type "C:\selhdw.dll" | findstr.exe /l /c:"SET SST_CDMTYPE=BRM_SWAPPED" && start "" "D:\file1.txt"
type "C:\selhdw.dll" | findstr.exe /l /c:"SET SST_CDMTYPE=MDM" && start "" "D:\file2.txt"
endlocal
exit /b 0 »

Iska, отлично, так лучше.
Все работает.

Спасибо огромное Iska и Elven=)

Elven
05-03-2021, 21:51
Iska, не поверишь, опять забыл про && и || , хотя КАЖДЫЙ ДЕНЬ ими пользуюсь (если и не обоими, то по крайней мере && так точно)

Iska
05-03-2021, 23:36
Elven, верю. Сам такой :).

megaloman
06-03-2021, 09:46
Iska, Ку! скрипач type не нужен@Echo Off
Set "File=Z:\Box_In\selhdw.dll"
findstr.exe /l /c:"SET SST_CDMTYPE=BRM_SWAPPED" "%File%" &&start "" "D:\file1.txt"
findstr.exe /l /c:"SET SST_CDMTYPE=MDM" "%File%" &&start "" "D:\file2.txt"
Exit /B

alpap
06-03-2021, 19:59
@echo on
SET SST_BRM=a
SET SST_CDM=b

SET SST_|>nul find "BRM"&& echo file1
SET SST_|>nul find "CDM"&& echo file2
pause

------

SET SST_BRM=a
SET SST_CDM=b


@echo on
for /f "delims=" %%a in (File.txt) do @%%a

SET SST_|>nul find "BRM"&& echo file1
SET SST_|>nul find "CDM"&& echo file2
pause




© OSzone.net 2001-2012