我正在制作游戏,并且希望为不同角色所说的对话着色。一切都运作良好,但只有我不使用'?'在用于为文本着色的调用函数中(出现为FINDSTR错误)。但是,我可以使用感叹号没有问题。关于如何解决这个问题的任何想法?
以防万一,我已经包含了为文本着色的代码。
编辑:此部分位于批处理文件的最顶层。
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...
答案 0 :(得分:1)
好的,我做了一些挖掘并找到了解决方法。可以使用?
,*
,:
,\
,/
,"
,<
等特殊字符, >
和|
。
将其放在批处理文件的最顶层:
@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
使用此格式为文字着色:
call :colorEcho [color] "Text"
E.g。 call :colorEcho C "Red"
这使用有效路径/文件名的规则。
如果路径中有\..\
,则前缀元素将被完全删除,并且此元素不必仅包含有效的文件名字符。
编辑:无法使用!
。将进一步调查。
答案 1 :(得分:0)
?
是单个字符的通配符(类似于*
,它是字符序列的通配符)。文件名中不允许使用此类字符。
错误消息的第一行来自重定向> "%~2"
,因为您无法使用通配符作为重定向目标,您需要在那里指定专用文件。
错误消息的第二行确实来自findstr
,它要求搜索字符串后面的命令行参数是指向现有文件的路径。由于重定向失败,如前所述,因此没有创建任何文件。
由于findstr
以彩色打印文件名,因此显然您只能使用文件名中允许的字符。因此,禁止使用以下内容:?
,*
,:
,\
,/
,"
,<
,{ {1}},>
。
顺便说一句,应删除最后一个命令行|
末尾的i
。