Batch file 为什么删除字符串中的子字符串不会';不行。批处理

Batch file 为什么删除字符串中的子字符串不会';不行。批处理,batch-file,Batch File,“check”变量必须包含“wert”。有什么问题吗?……如果要将%check%设置为“wert” 应该是 set check=%%1:%2=% 有关更多信息,请检查命令提示符中的命令帮助设置,此示例可能有助于您: @Echo关闭 SetLocal EnableExtensions DisableDelayedExpansion 对于/F“Delims==”%%G In(”(Set _cp)2>NUL“)Do Set“%%G=” 对于(“%SystemRoot%\System32\chcp.c

“check”变量必须包含“wert”。有什么问题吗?……如果要将%check%设置为“wert”

应该是

set check=%%1:%2=%

有关更多信息,请检查命令提示符中的命令
帮助设置

,此示例可能有助于您:

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
对于/F“Delims==”%%G In(”(Set _cp)2>NUL“)Do Set“%%G=”
对于(“%SystemRoot%\System32\chcp.com”中的/F令牌^=*%%G”
)%%H In(%%G)的Do设置“\u cp=%%~nH”
如果不是%\u cp%eq 65001(设置为“\u cpc=TRUE”
“%SystemRoot%\System32\chcp.com”65001>NUL)
设置“测试=qwert”
开始
:IsStrInStrFunc
设置“检查=%~1”
前回显:%check%
SetLocal EnabledelayedExpansion
设置“检查=!检查:%~2=!”
EndLocal和Echo之后:%check%
退出/B
:开始
调用:IsString strFunc“%test%”q
暂停
如果已定义_cpc“%SystemRoot%\System32\chcp.com”%\u cp%>NUL
后藤:EOF

要对变量进行子字符串替换,您需要的是variablename,而不是它的值(请参见
设置/?
),因此
调用中的参数不能是
%test%
(它将传递字符串
queryt
),但必须是
测试
既然您正在使用延迟扩展,为什么不使用它呢

set check=%test:~1%

PS:您不需要在简单的示例中使用
~
字符,但它们也不会干扰您。假设您想替换
一个字符串
,只需调用
即可:IsString strFunc test“a string”
(这就是
~
必须的地方。无论如何都要包含它们的好做法(以防万一))

我想使用函数从单词“qwert”中删除“q”为什么我不能同时使用这两个参数(%1,%2)在一行中?如果可以直接从一行中的
%1
的值字符串内容中删除
%2
的值字符串内容,就像您所指示的那样,那么我就不会发布我所做的事情了!您可能的选择是使用
呼叫
黑客攻击,这不是一种稳健的方法,并且已经在评论中提供。您已经收到了@GreenMap的答案,对于您提交的问题,请阅读,要理解现在对您开放的选项,应该是:
调用集检查=%%%1:%2=%%
,调用应该是:
调用:IsStrInStrFunc test,q
,也就是说,在子例程中要使用变量test的名称,而不是它的值。。。
set check=%test:~1%
@echo off
@chcp 65001
setlocal enableextensions enabledelayedexpansion
set "test=qwert"
goto start
:IsStrInStrFunc
setlocal
REM call set "check=%%%~1:%~2=%%"
set "check=!%~1:%~2=!"
echo %check%
endlocal
exit /b
:start
call :IsStrInStrFunc test q