2016-07-26 3 views
4

Ich mache ein Spiel, und möchte die Dialoge verschiedene Zeichen sagen sagen. Alles funktioniert gut, aber nur wenn ich nicht '?' in der Call-Funktion, mit der der Text eingefärbt wird (erscheint als FINDSTR-Fehler). Ich kann jedoch ein Ausrufezeichen ohne Probleme verwenden. Irgendwelche Ideen, wie das zu beheben ist?"FINDSTR:" Fehler bei der Verwendung von Sonderzeichen in einer Anruffunktion (Batch)

Nur für den Fall, ich habe den Code, der den Text einfärbt.

EDIT: Dieser Teil geht ganz oben in der Batch-Datei.

for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do  rem"') do (
set "DEL=%%a" 
) 

Dieser Teil geht am unteren Ende der Batchdatei.

:colorEcho 
echo off 
<nul set /p ".=%DEL%" > "%~2" 
findstr /v /a:%1 /R "^$" "%~2" nul 
del "%~2" > nul 2>&1i 

Dies ist der Fehler, der aufkommt:

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

Das 'i' in der letzten Zeile des Codes ist ein Tippfehler, richtig? Bitte geben Sie eine Beispiel-Befehlszeile, wie Sie die angegebene Routine aufrufen und sagen Sie uns, was% DEL% auf ... – aschipfl

+0

gesetzt ist Zweifel, dass "i" ein Tippfehler ist. So würde ich die Routine aufrufen: 'call: colorEcho [color]" Text "' '% DEL%' ist auf '%% a' gesetzt. – FudgeMuffins

+0

Das 'i' ist in der Tat ein Tippfehler, aber es schadet anscheinend nicht; Bitte fügen Sie die Befehlszeile "call" in Ihren Fragepost ein ... – aschipfl

Antwort

0

Die ? ist ein Platzhalter für ein einzelnes Zeichen (ähnlich die *, die für eine Folge von Zeichen ist ein Platzhalter). Solche Zeichen sind in Dateinamen nicht erlaubt.

Die erste Zeile der Fehlermeldung kommt von der Umleitung > "%~2", da Sie keine Platzhalter für das Umleitungsziel verwenden können, müssen Sie dort eine dedizierte Datei angeben.

Die zweite Zeile der Fehlermeldung kommt in der Tat von findstr, die das Befehlszeilenargument erwartet nach der Suchzeichenfolge ein Pfad sein, der auf eine vorhandene Datei oder Dateien verweist. Da die Umleitung wie oben beschrieben fehlgeschlagen ist, wurde keine Datei erstellt.

Da findstr Dateinamen in Farbe ausgibt, ist es offensichtlich, dass Sie nur Zeichen verwenden können, die in Dateinamen zulässig sind. Daher sind die folgenden verboten: ?, *, :, \, /, ", <, >, |.

Übrigens sollte die i am Ende der letzten Befehlszeile del "%~2" > nul 2>&1i entfernt werden.

+0

Wie werde ich das beheben? – FudgeMuffins

+0

Ich fürchte, es gibt keine Lösung für den aktuellen Ansatz ... – aschipfl

+0

Entdeckt einen Workaround @aschipfl – FudgeMuffins

1

Ok, ich habe etwas gegraben und einen Weg gefunden. Es ist möglich, Sonderzeichen wie ?, *, :, \, /, ", <, > und | zu verwenden.

Setzen Sie dieses an der Spitze der Batchdatei:

@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 ".=." 

das Setzen am unteren Ende der Batchdatei:

: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 

Verwenden Sie dieses Format, um den Text zu färben:

call :colorEcho [color] "Text"

Z.B. call :colorEcho C "Red"

Dies verwendet die Regel für gültige Pfad/Dateinamen. Wenn sich \..\ im Pfad befindet, wird das vorangestellte Element vollständig entfernt und es ist nicht notwendig, dass dieses Element nur gültige Dateinamen enthält.

EDIT: Nicht in der Lage zu verwenden !. Wird weiter untersuchen.

Verwandte Themen