web-dev-qa-db-ja.com

DOS:文字列を見つけ、見つかったら別のスクリプトを実行します

DOSを使用してファイル内の文字列を検索したい:

例えば

"string" status.txtを見つけます

そして、見つかったら、バッチファイルを実行します。

これを行う最良の方法は何ですか?

19
Manjot
@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
HELPY

バッチファイルで何かを行ってからしばらく経ちましたが、次のように動作すると思います。

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

これは本当に概念実証です。ニーズに合わせてクリーンアップしてください。重要なのは、finderrorlevelにない場合、string1fileを返すということです。この場合、notfoundに分岐します。そうでない場合は、foundの場合を処理します。

28
jason
C:\test>find /c "string" file | find ": 0" 1>nul && echo "execute command here"
10
ghostdog74

2つのコマンドがあります。1つ目は「condition_command」、2つ目は「result_command」です。 「condition_command」が成功したときに「result_command」を実行する必要がある場合(errorlevel = 0):

condition_command && result_command

「condition_command」が失敗したときに「result_command」を実行する必要がある場合:

condition_command || result_command

したがって、「status.txt」ファイルに「string」がある場合に「some_command」を実行する場合:

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

ファイル "status.txt"に "string"がない場合:

find "string" status.txt 1>nul || some_command
7
snv.dev

答えが正しいとマークされている場合、それはWindows Dosプロンプトスクリプトであり、これも機能します。

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