Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在变量末尾查找字符串-批处理脚本_Batch File_Variables_Input_Echo - Fatal编程技术网

Batch file 在变量末尾查找字符串-批处理脚本

Batch file 在变量末尾查找字符串-批处理脚本,batch-file,variables,input,echo,Batch File,Variables,Input,Echo,我正在编写一个批处理脚本来接收命令并运行它们。我需要在输入的末尾检查用户输入的字符串。例如,假设用户键入ECHO Hello World&ECHO ON,并且该命令存储的变量是%CHO%,如何在变量末尾找到&ECHO ON 我已经有办法在输入中找到ECHO ON&,但是我需要一种方法来检查ECHO ON是否位于变量的末尾。如果我只是检查&ECHO ON,脚本很容易出错&ECHO forwards或类似的内容,并认为它实际上是&ECHO ON 关于如何做到这一点有什么想法吗?试试这个-它也应该能够

我正在编写一个批处理脚本来接收命令并运行它们。我需要在输入的末尾检查用户输入的字符串。例如,假设用户键入
ECHO Hello World&ECHO ON
,并且该命令存储的变量是
%CHO%
,如何在变量末尾找到
&ECHO ON

我已经有办法在输入中找到
ECHO ON&
,但是我需要一种方法来检查
ECHO ON
是否位于变量的末尾。如果我只是检查
&ECHO ON
,脚本很容易出错
&ECHO forwards
或类似的内容,并认为它实际上是
&ECHO ON


关于如何做到这一点有什么想法吗?

试试这个-它也应该能够处理特殊符号(它使用子程序):

您还可以使用
FINDSTR
(可能会较慢,因为它依赖于外部命令):


对于
SET
命令,可以使用帮助文件中概述的子字符串
IF/I“echo on”==%cho:~-7%”回显匹配
有趣,似乎有点多。有更简单的方法吗?@ChristianSirolli-检查我的更新(你可能仍然需要为特殊符号添加一些技巧)。虽然您可以将代码作为独立函数使用,而不必担心其中的复杂性。如何将其作为独立函数使用?@ChristianSirolli-我在第一个代码段中添加了示例调用。您能解释一下它的功能吗?
@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
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
echo abcdefgh| findstr /e "fgh" >nul 2>nul && (
   echo ends with 
)||(
  echo  does not ends with
)