Batch file &引用;FINDSTR:“;在调用函数(批处理)中使用特殊字符时出错

Batch file &引用;FINDSTR:“;在调用函数(批处理)中使用特殊字符时出错,batch-file,Batch File,我在做一个游戏,想给不同角色的对话涂上颜色。一切正常,但前提是我没有在用于为文本着色的调用函数中使用“?”(出现FINDSTR错误)。然而,我可以毫无问题地使用感叹号。有没有办法解决这个问题 以防万一,我已经包含了为文本着色的代码 编辑:此部分位于批处理文件的最顶端。 此部分位于批处理文件的底部。 ?是单个字符的通配符(类似于*是字符序列的通配符)。文件名中不允许使用此类字符 错误消息的第一行来自重定向“%~2”,因为您不能对重定向目标使用通配符,所以需要在那里指定一个专用文件 错误消息的第二行

我在做一个游戏,想给不同角色的对话涂上颜色。一切正常,但前提是我没有在用于为文本着色的调用函数中使用“?”(出现FINDSTR错误)。然而,我可以毫无问题地使用感叹号。有没有办法解决这个问题

以防万一,我已经包含了为文本着色的代码

编辑:此部分位于批处理文件的最顶端。

此部分位于批处理文件的底部。


是单个字符的通配符(类似于
*
是字符序列的通配符)。文件名中不允许使用此类字符

错误消息的第一行来自重定向
“%~2”
,因为您不能对重定向目标使用通配符,所以需要在那里指定一个专用文件

错误消息的第二行确实来自
findstr
,它期望搜索字符串后面的命令行参数是指向现有文件的路径。由于重定向如前所述失败,因此未创建任何文件

由于
findstr
以彩色打印文件名,很明显,您只能使用文件名中允许的字符。因此禁止使用下列代码:
*
\


顺便说一句,最后一个命令行
del“%~2”>nul2>&1i
末尾的
i
应该被删除。

好的,我做了一些挖掘,找到了一种解决方法。可以使用特殊字符,例如
*
,和
|

将其放在批处理文件的最顶端:

@echo关闭
setlocal EnableDelayedExpansion
对于/F“tokens=1,2 delims=#”%%a in(‘“prompt#$H#$E#&echo on&for%%b in(1)do rem“’)do(
设置“DEL=%%a”
)
rem准备一个只有一个点的文件“X”
X集/p“=”
将其放在批处理文件的最底部:

:彩色回波
设置“参数=^%~2”!
设置“参数=!参数:=\!”
findstr/p/A:%1“!param!\..\X”nul

最后一行代码中的
i
是一个打字错误,对吗?请提供一个如何调用给定例程的示例命令行,并告诉我们
%DEL%
设置为什么…怀疑
i
是否输入错误。这就是我调用例程的方式:
call:colorEcho[color]“Text”
%DEL%
被设置为
%a
i
确实是一个输入错误,但显然不会造成伤害;请将
call
命令行包含在您的提问栏中…我将如何着手解决此问题?
 for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do     rem"') do (
 set "DEL=%%a"
)
:colorEcho
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1i  
The filename, directory name, or volume label syntax is incorrect.
FINDSTR: Cannot open  'When did it get so dark outside?' It was morning a few minutes ago...
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)

rem Prepare a file "X" with only one dot
<nul > X set /p ".=."
:colorEcho
set "param=^%~2" !
set "param=!param:"=\"!"
findstr /p /A:%1 "." "!param!\..\X" nul
<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"
exit /b