首页 > 解决方案 > 在批处理中,如何为变量添加空格?

问题描述

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

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

标签: batch-file

解决方案


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

设置“ parameter1=%% parameter1%%%%空格:~- parameter2%%”

接下来,观察逃逸序列,%逃逸%

设置“参数1=%参数1%%空格:~-参数2 %

当这个命令被执行时,它被重新解析为

设置“parameter1 = parameter1 %spaces 的内容:~*contents of **parameter2*%”

第二个例程是另一种方法,使用相同的解析技巧,但这次添加第三个参数,可能是字符或字符串,如果要重复的字符串包含像空格这样的分隔符,那么它必须是"quoted".


推荐阅读