JSON не может содержать символы NUL, но он может содержать escape-последовательность \u0000
для представления символа NUL. В JavaScript это будет представлено как '\\u0000'
('\u0000'
это просто строка длиной один; один символ NUL).
console.log( JSON.parse('"we\\u0000e"') === "we\0e" );
Можно сделать это вполне аккуратно с ENABLEDELAYEDEXPANSION
опция. Это позволяет Вам использовать !
как переменный маркер, который оценен после %
.
REM Turn on Delayed Expansion
SETLOCAL ENABLEDELAYEDEXPANSION
REM Define messages as variables with the ERRORLEVEL on the end of the name
SET MESSAGE0=Everything is fine
SET MESSAGE1=Failed for such and such a reason
SET MESSAGE2=Failed for some other reason
REM Set ERRORLEVEL - or run command here
SET ERRORLEVEL=2
REM Print the message corresponding to the ERRORLEVEL
ECHO !MESSAGE%ERRORLEVEL%!
Ввести HELP SETLOCAL
и HELP SET
в командной строке для получения дополнительной информации о задержанном расширении.
Можно сделать что-то как следующий код. Обратите внимание, что ошибочные сравнения уровня должны произойти в порядке убывания из-за cmd причуды.
setlocal
rem Main script
call :LookupErrorReason %errorlevel%
echo FAILED Test case failed, error reason: %errorreason% >> TestSuite1Log.txt
goto :EndOfScript
rem Lookup subroutine
:LookupErrorReason
if %%1 == 3 set errorreason=Some reason
if %%1 == 2 set errorreason=Another reason
if %%1 == 1 set errorreason=Third reason
goto :EndOfScript
:EndOfScript
endlocal
Да можно использовать вызов. Только на новой строке имеют вызов и первенство errorcode. Это должно работать, но я не протестировал.
C:\Users\matt.MATTLANT>help call
Calls one batch program from another.
CALL [drive:][path]filename [batch-parameters]
batch-parameters Specifies any command-line information required by the
batch program.
SEDIT: orry я, возможно, неправильно понял немного, но можно использовать ЕСЛИ также
Не точно как этот, с подпрограммой, но можно или заполнить переменную с текстом с помощью goto обходного решения.
Может быть легче, если этот ваш набор тестов растет вполне немного для использования более мощного языка. Perl или даже Windows Scripting Host могут помочь Вам там.
Протестируйте свои значения в обратном порядке и используйте перегруженное поведение ЕСЛИ:
@echo off
myApp.exe
if errorlevel 2 goto Do2
if errorlevel 1 goto do1
echo Success
goto End
:Do2
echo Something when 2 returned
goto End
:Do1
echo Something when 1 returned
goto End
:End
Если бы Вы хотите быть более мощными, Вы могли бы попробовать что-то вроде этого (необходимо было бы заменить %1%errorlevel, но более трудно протестировать на меня). Необходимо было бы поместить маркировку для каждого ошибочного уровня, с которым Вы имеете дело:
@echo off
echo passed %1
goto Label%1
:Label
echo not matched!
goto end
:Label1
echo One
goto end
:Label2
echo Two
goto end
:end
Вот тест:
C:\>test
passed
not matched!
C:\>test 9
passed 9
The system cannot find the batch label specified - Label9
C:\>test 1
passed 1
One
C:\>test 2
passed 2
Two
Можно использовать оператор 'IF ERRORLEVEL', чтобы сделать разные вещи на основе кода возврата.
См.:
http://www.robvanderwoude.com/errorlevel.html
В ответ на Ваш второй вопрос я переместился бы в использование языка сценариев так или иначе, так как пакетные файлы Windows по сути так ограничены. Существуют большие дистрибутивы Windows для Perl, Python, Ruby, и т.д., таким образом, никакая причина не использовать их, действительно. Я лично люблю делать сценарии Perl в Windows.