2017-12-12 9 views
2

コマンドを受け取って実行するバッチスクリプトを書いています。私は、入力の最後に文字列の入力を調べる必要があります。たとえば、ユーザーがECHO Hello World & ECHO ONと入力し、このコマンドが格納されている変数が%CHO%である場合、変数の末尾にはどのようにして& ECHO ONが見つかりますか?変数の最後に文字列を見つける - バッチスクリプト

すでにECHO ON &が入力されていますが、& ECHO ONが変数の最後にあるかどうかを確認する方法が必要です。もし私がちょうど& ECHO ONをチェックするのであれば、スクリプトは簡単に& ECHO ONWARDSとかそのようなものと間違えて、実際には& ECHO ONだと思うでしょう。

どのようにこれを行うことができますか?

+4

'SET'コマンドのヘルプファイルに記載されているように、部分文字列を使用することができます。 「IF/I」= "=="%cho:〜-7% "echo match' – Squashman

答えて

1

これを試してみてください - あまりにも特殊記号を処理できる必要があります(それはendsWithサブルーチンを使用しています):

@echo off 

:::example calls of :endsWith subroutine 

call :endsWith abcdefgh fgh 
echo %errorlevel% 
call :endsWith abcdefgh abc 
echo %errorlevel% 

exit /b 0 

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
:endsWith [%1 - string to be checked;%2 - string for checking ] 
@echo off 
rem :: sets errorlevel to 1 if %1 ends with %2 else sets errorlevel to 0 
setlocal EnableDelayedExpansion 

set "string=%~1" 
set "checker=%~2" 

set LF=^ 


rem ** Two empty lines are required 
rem echo off 
for %%L in ("!LF!") DO (
    for /f "delims=" %%R in ("!checker!") do ( 
     set "var=!string:%%~R=%%L#!" 
    ) 
) 

for /f "delims=" %%P in (""!var!"") DO (
    set "temp=%%~P" 
) 

if "%temp%" EQU "#" (
    endlocal & exit /b 1 
) else (
    endlocal & exit /b 0 
) 
goto :eof 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 

あなたはまた、(それが外部コマンドに依存しているとして、おそらく遅くなります)FINDSTRを使用することができます。

echo abcdefgh| findstr /e "fgh" >nul 2>nul && (
    echo ends with 
)||(
    echo does not ends with 
) 
+0

面白いですが、少し面白そうです。簡単な方法はありますか? –

+0

@ChristianSirolli - 私の更新をチェックしてください(特別なシンボルのためにいくつかのトリックを追加する必要があるかもしれません)。複雑さを気にせずにスタンドアロン機能としてコードを使用することができます – npocmaka

+0

スタンドアロン機能としてどのように使用しますか? –

関連する問題