批量处理中,如何在变量中添加空格?

时间:2019-06-20 08:37:25

标签: batch-file

我正在创建一个游戏。当玩家按下A或D时,角色会移动。我的问题是:如何为这些变量批量添加空格?我有这段代码可以为玩家和敌人设置空白变量:

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

1 个答案:

答案 0 :(得分:1)

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例程中,setCALL赋值,并且在执行之前进行以下替换-从左向左读取对

  

设置“%1 = %%% 1 %%%% spaces:〜-%2 %%”

首先,将参数值替换为%1 ..%9

  

设置“ parameter1 = %% parameter1 %%%% spaces:〜-parameter2 %%”

接下来,观察转义序列,%转义%

  

设置“ parameter1 = % parameter1 %%空格:〜-parameter2 %

执行此命令后,其重新解析为

设置“ parameter1 = 参数1的内容%spaces:〜*** parameter2 *%的内容”

第二个例程是另一种方法,使用了相同的解析技巧,但是这次添加了第三个参数,该参数可以是字符或字符串,如果要重复的字符串包含分隔符(如空格),则它必须为{{ 1}}。