web-dev-qa-db-fra.com

DOS: recherchez une chaîne, si elle est trouvée, exécutez un autre script

Je veux trouver une chaîne dans un fichier en utilisant DOS:

Par exemple

rechercher "string" status.txt

Et quand il est trouvé, je veux exécuter un fichier batch.

Quelle est la meilleure façon de procéder?

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

Cela fait un moment que je n'ai rien fait avec des fichiers batch mais je pense que ce qui suit fonctionne:

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

C'est vraiment une preuve de concept; nettoyer comme il convient à vos besoins. La clé est que find renvoie un errorlevel de 1 si string n'est pas dans file. Nous nous branchons sur notfound dans ce cas, sinon nous gérons le cas found.

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

Nous avons deux commandes, la première est "condition_command", la seconde est "result_command". Si nous devons exécuter "result_command" lorsque "condition_command" réussit (errorlevel = 0):

condition_command && result_command

Si nous devons exécuter "result_command" lorsque "condition_command" échoue:

condition_command || result_command

Par conséquent, pour exécuter "some_command" dans le cas où nous avons "string" dans le fichier "status.txt":

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

au cas où nous n'aurions pas "string" dans le fichier "status.txt":

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

Comme la réponse est indiquée comme correcte, il s'agit d'un script d'invite Windows Dos et cela fonctionnera aussi:

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