DOS: найти строку, если найден, запустить другой скрипт - PullRequest
19 голосов
/ 06 января 2010

Я хочу найти строку в файле, используя DOS:

Например

найти "строку" status.txt

И когда он найден, я хочу запустить командный файл.

Каков наилучший способ сделать это?

Ответы [ 5 ]

28 голосов
/ 06 января 2010

Прошло некоторое время с тех пор, как я что-то сделал с пакетными файлами, но я думаю, что работает следующее:

find /c "string" file
if %errorlevel% equ 1 goto notfound
echo found
goto done
:notfound
echo notfound
goto done
:done

Это действительно подтверждение концепции;Убирайся, как тебе удобно.Ключ в том, что find возвращает errorlevel из 1, если string не в file.В этом случае мы переходим к notfound, в противном случае мы обрабатываем случай found.

10 голосов
/ 06 января 2010
C:\test>find /c "string" file | find ": 0" 1>nul && echo "execute command here"
7 голосов
/ 21 апреля 2013

У нас есть две команды, первая - «condition_command», вторая - «result_command». Если нам нужно выполнить «result_command», когда «condition_command» успешно (errorlevel = 0):

condition_command && result_command

Если нам нужно запустить «result_command», когда «condition_command» не выполнена:

condition_command || result_command

Поэтому для запуска «some_command» в случае, когда у нас есть «строка» в файле «status.txt»:

find "string" status.txt 1>nul && some_command

в случае, если у нас нет «строки» в файле «status.txt»:

find "string" status.txt 1>nul || some_command
6 голосов
/ 12 ноября 2014
@echo off
cls
MD %homedrive%\TEMPBBDVD\
CLS
TIMEOUT /T 1 >NUL
CLS
systeminfo >%homedrive%\TEMPBBDVD\info.txt
cls
timeout /t 3 >nul
cls
find "x64-based PC" %homedrive%\TEMPBBDVD\info.txt >nul
if %errorlevel% equ 1 goto 32bitsok
goto 64bitsok
cls

:commandlineerror
cls
echo error, command failed or you not are using windows OS.
pause >nul
cls
exit

:64bitsok
cls
echo done, system of 64 bits
pause >nul
cls
del /q /f %homedrive%\TEMPBBDVD\info.txt >nul
cls
timeout /t 1 >nul
cls
RD %homedrive%\TEMPBBDVD\ >nul
cls
exit

:32bitsok
cls
echo done, system of 32 bits
pause >nul
cls
del /q /f %homedrive%\TEMPBBDVD\info.txt >nul
cls
timeout /t 1 >nul
cls
RD %homedrive%\TEMPBBDVD\ >nul
cls
exit
6 голосов
/ 21 апреля 2013

Поскольку ответ помечен как правильный, то это сценарий приглашения Windows Dos, и это тоже будет работать:

find "string" status.txt >nul && call "my batch file.bat"
...