Batch - синтаксическая ошибка при попытке отобразить знак «больше, чем» (>) - PullRequest
0 голосов
/ 18 мая 2018

У меня есть следующая строка:

@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 s ничего.Когда я уменьшаю строку аргумента CALL до "!countArgs!. Argument ^-^>", я получаю синтаксическую ошибку, а когда я уменьшаю ее до "!countArgs!. Argument ^-" или даже "!countArgs!. Argument -", она работает правильно.

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

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

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

1 Ответ

0 голосов
/ 18 мая 2018

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

@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%" будет хорошо - хотя он покажет окружающие кавычки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...