Пакет — синтаксическая ошибка при попытке повторить знак «больше, чем» (›)

У меня есть следующий стрип:

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

SET /A countArgs=1
...
SET /A countArgs+=1

CALL :error "!countArgs!. Argument ^-^> bla"
EXIT /B 1

...

:error
    ECHO ERROR
    ECHO %~1
EXIT /B 0

Но 2. ECHO строка в :error подпрограмме echo ничего не значит. Когда я уменьшаю строку аргумента CALL до "!countArgs!. Argument ^-^>", я получаю синтаксическую ошибку, а когда я уменьшаю ее до "!countArgs!. Argument ^-" или даже "!countArgs!. Argument -", все работает правильно.

Согласно этому сообщению, символ должен быть экранирован при добавлении ^, если он находится внутри кавычек, что имеет смысл, потому что при использовании строки в качестве параметра в подпрограмме :error ~ удаляет окруженные кавычки...

Как я могу это исправить?

Ценю вашу помощь.


person goulashsoup    schedule 18.05.2018    source источник


Ответы (1)


нет необходимости избегать > с помощью call. Это безопасно из-за окружающих кавычек. Ошибка возникает при отображении ее в подпрограмме. Вы можете использовать отложенное расширение, чтобы echo это:

@echo off

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

SET /A countArgs=1
...
SET /A countArgs+=1

CALL :error "!countArgs!. Argument -> bla"
EXIT /B 1

...

:error
    ECHO ERROR
    for /f "delims=" %%a in ("%~1") do echo for:      %%a
    echo quoted:  "%~1"
    set "x=%~1"
    ECHO delayed:  !x!
EXIT /B 0

Это безопасно со строкой call из-за окружающих кавычек.
Это безопасно с командой set, а также из-за окружающих кавычек.
Это безопасно со строкой echo из-за использования отложенного раскрытия (echo %x% потерпит неудачу, но echo "%x%" будет будь в порядке - хотя он покажет окружающие кавычки).

person Stephan    schedule 18.05.2018
comment
Спасибо, но нет ли способа избежать set ... и напрямую повторить его? - person goulashsoup; 19.05.2018
comment
добавил еще один вариант. - person Stephan; 19.05.2018
comment
Спасибо, к сожалению, восклицательный знак в конце не получает echod, но поскольку вопрос касался синтаксической ошибки в моем предыдущем подходе, я задал новый вопрос для этого. - person goulashsoup; 19.05.2018