2016-07-26 19 views
4

我正在製作一款遊戲,並且想要爲不同角色說的對話着色。一切運作良好,但只有當我不使用'?'時在用於給文本着色的調用函數中(作爲FINDSTR錯誤出現)。但是,我可以使用沒有問題的感嘆號。有想法該怎麼解決這個嗎?「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

最後一行代碼中的'i'是一個錯字,對嗎?請提供一個示例命令行,告訴我們如何調用給定的例程,並告訴我們'%DEL%'設置爲... – aschipfl

+0

懷疑'i'是一個錯字。這就是我如何調用例程:'call:colorEcho [color]「Text」''%DEL%''設置爲'%% a'。 – FudgeMuffins

+0

'我'確實是一個錯字,但它顯然沒有傷害;請將'call'命令行包含到您的問題文章中... – aschipfl

回答

0

?爲單個字符一個通配符(類似於*這是一個字符序列一個通配符)。文件名中不允許使用這些字符。

錯誤消息的第一行來自重定向> "%~2",因爲您不能使用通配符作爲重定向目標,所以您需要在那裏指定專用文件。

錯誤消息的第二行確實來自findstr,它要求搜索字符串後面的命令行參數是指向現有文件或多個文件的路徑。由於重定向如前所述失敗,因此沒有創建文件。

由於findstr以彩色打印文件名,因此顯然您只能使用文件名中允許的字符。因此,下面的人被禁止:?*:\/"<>|

順便說一下,在最後一個命令行del "%~2" > nul 2>&1i末尾的i應該被刪除。

+0

我將如何解決此問題? – FudgeMuffins

+0

恐怕目前的方法沒有修復... – aschipfl

+0

找出解決方法@aschipfl – FudgeMuffins

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"

例如call :colorEcho C "Red"

這使用有效路徑/文件名的規則。 如果\..\位於路徑中,則前綴元素將被完全移除,並且此元素不必僅包含有效的文件名字符。

編輯:無法使用!。將進一步調查。