“FINDSTR:”在呼叫功能中使用特殊字符时出错(批量)

时间:2016-07-26 22:01:22

标签: batch-file

我正在制作游戏,并且希望为不同角色所说的对话着色。一切都运作良好,但只有我不使用'?'在用于为文本着色的调用函数中(出现为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...

2 个答案:

答案 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