私は多くの場所で解決策を見つけようとしましたが、具体的な答えを見つけることができませんでした。
バッチスクリプトを作成しています。以下はこれまでの私のコードです
@echo off
SETLOCAL EnableDelayedExpansion
cls
for /f "delims=" %%a in ('rasdial EVDO cdma cdma') do set "ras=!ras! %%a"
findstr /C:"%ras%" "already"
if %errorlevel% == 0
(
echo "it says he found the Word already"
)
else
(
echo "it says he couldn't find the Word already"
)
出力:
FINDSTR: Cannot open already
The syntax of the command is incorrect.
変数「ras」で「already」という単語を見つけようとしています。
問題はfindstr/C: "%ras%" "already"にあるようです
findstr "%ras%" "already"を使用してみましたが、それも機能しません。
コードには2つの問題があります。
1つ目は、findstr
の仕組みです。入力の各行について、その行に指定されたリテラルまたは正規表現が含まれているかどうかがチェックされます。テストされる入力行は、ファイルまたは標準入力ストリームから読み取ることができますが、コマンドラインの引数から読み取ることはできません。行をfindstr
コマンドにパイプする最も簡単な方法
echo %ras% | findstr /c:"already" >nul
2番目の問題は、if
コマンドの記述方法です。開始括弧は条件と同じ行にある必要があり、else
句は最初の終了括弧と同じ行にある必要があり、else
句の開始括弧はelse
句と同じ行( ここ を参照)
if condition (
code
) else (
code
)
ただし、変数に文字列が含まれているかどうかをテストするには、簡単に実行できます。
if "%ras%"=="%ras:already=%" (
echo already not found
) else (
echo already found
)
これは、変数の値が、文字列already
が何にも置き換えられていない同じ値に等しいかどうかをテストします。
変数の編集/置換に関する情報については、 ここ を参照してください。
私はすでに解決策を見つけたようです。
echo %ras% | findstr "already" > nul
と@Karata私は使用できません
rasdial EVDO cdma cdma | findstr already > NUL
複数のケースのスクリプトを書いていて、出力を変数に格納したいので..とにかくありがとう。
「コマンドの構文が正しくありません。」バッチコマンドラインに存在しない「else」について報告されます。
For
findstr /c:"str" file
ここで、strは検索するリテラル、fileは検索を実行するファイル名です。したがって、これは要件を満たしていません。
以下が必要だと思います。
rasdial EVDO cdma cdma | findstr already > NUL
if %errorlevel% EQU 0 (
echo "it says he found the Word already"
)
if %errorlevel% NEQ 0 (
echo "it says he couldn't find the Word already"
)