В пакетном режиме, как добавить пробелы в переменные? - PullRequest
0 голосов
/ 20 июня 2019

Я создаю игру.Персонаж двигается, когда игрок нажимает кнопку A или D. У меня такой вопрос: как добавить пробелы к этим переменным в пакете?У меня есть этот код, который устанавливает пустые переменные для игрока и врага:

set right=
set left=
set leften=
set righten=

1 Ответ

1 голос
/ 20 июня 2019
set "right= "

Всегда хорошая идея использовать кавычки в set строковых командах.

Демонстрация с использованием передовых методов ...

@ECHO OFF
SETLOCAL

:: a variable with many spaces

SET "spaces=                    "

SET "myvar="
ECHO Hello%myvar%World

CALL :addspaces myvar 2

ECHO Hello%myvar%World

CALL :addspaces myvar 3

ECHO Hello%myvar%World

SET "mynewvar=Another"

ECHO %mynewvar%Spaces

CALL :addspaces mynewvar 3

ECHO %mynewvar%Spaces

ECHO ----------------Another method --------

SET "myvar="
ECHO Another%myvar%method

CALL :addchars myvar 2

ECHO Another%myvar%method

CALL :addchars myvar 3 x

ECHO Another%myvar%method

SET "mynewvar=Batch is "

ECHO %mynewvar%easy

CALL :addchars mynewvar 13 "so "

ECHO %mynewvar%easy

PAUSE
GOTO :eof

:: To variable name %1, add %2 spaces

:addspaces
CALL SET "%1=%%%1%%%%spaces:~-%2%%"
GOTO :eof

:: To variable name %1, add %2 of %3;spaces if %3 is missing

:addchars

FOR /L %%Z IN (1,1,%2) DO IF "%~3"=="" (CALL SET "%1=%%%1%% ") ELSE (CALL SET "%1=%%%1%%%~3")

GOTO :eof

Две подпрограммы требуют объяснения.

В связи с тем, как работает cmd, в подпрограмме :addspaces set имеет значение CALL ed, и перед выполнением выполняются следующие замены - чтение слева направо

установите "% 1 = %%% 1 %%%% пробелов: ~ -% 2 %%"

сначала, замените значения параметра на% 1 ..% 9

set "parameter1 = %% parameter1 %%%% Пробелы: ~ - parameter2 %%"

Далее, наблюдать escape-последовательности, % escape %

set "параметр1 = % параметр1 %% пробелы: ~ -parameter2 %"

Когда эта команда выполняется, онаповторно анализируется как

set "параметр1 = содержимое параметра1 % пробелов: ~ * содержимое ** параметра2 *%"

Вторая процедура - это другой подход, такой жеИспользуется трюк для разбора, но на этот раз добавляется третий параметр, который может быть символомr или строка, и если повторяющаяся строка содержит символ-разделитель, такой как пробел, то это должно быть "quoted".

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