2015-02-22 2 views
0

Скажем, у меня есть переменная% Inventory%
иКак сделать% var% worth несколько строк эха? - Пакетное

echo %inventory% 

Равно

echo %slotOne% 
echo %slotTwo% 
echo %slotThree% 

И так далее ...
Есть ли способ сделать это, или я просто необходимо использовать

:Inventory 
cls 
echo %slotOne% 
echo %slotTwo% 
echo %slotThree% 
pause<nul 
goto *** 

ответ

2

То, что вы хотите сделать, это показать выход через a двухэтапная процедура: сначала определите «выходной формат» (представленный вашей переменной «инвентарь»), состоящий из нескольких переменных данных, и , то показывают значения всех ранее определенных переменных через ECHO переменной одиночного формата. Это возможно с помощью с задержкой расширения с помощью этого трюка: сначала сохраните переменные данных в «переменной формата», заключенные в восклицательные знаки (с задержкой расширения отключены), затем включите отложенное расширение и используйте одно расширение echo %inventory%, чтобы показать все значения:

@echo off 
setlocal DisableDelayedExpansion 

set LF=^ 
%empty line 1/2% 
%empty line 2/2% 

rem Define the "format" 
set inventory=!slotOne!!LF!!slotTwo!!LF!!slotThree! 

setlocal EnableDelayedExpansion 

rem Define a set of values: 
set slotOne=Slot one - First set 
set slotTwo=Slot two - First set 
set slotThree=Slot three - First set 

rem Show the first set: 
echo First set: 
echo %inventory% 

rem Define another set of values and show it 
set slotOne=Slot one - Second set 
set slotTwo=Slot two - Second set 
set slotThree=Slot three - Second set 
echo/ 
echo Second set: 
echo %inventory% 

pause 

Выход:

First set: 
Slot one - First set 
Slot two - First set 
Slot three - First set 

Second set: 
Slot one - Second set 
Slot two - Second set 
Slot three - Second set 
Press any key to continue . . . 
1

Вам нужно будет сделать переменную новой строки, поскольку партия не га ve один удобный. Я никогда не слышал, чтобы использовать ALT + 10, как предполагает Moncraft, но этот путь ближе всего находится к «стандартной» способ сделать это:

@echo off 
setlocal enabledelayedexpansion 

set LF=^ 


:: The above two lines MUST be present or it won't work 
set NL=^^^%LF%%LF%^%LF%%LF% 

set inventory=%slotOne%%NL%%slotTwo%%NL%%slotThree% 

Лично я предложил бы использовать номера для слотов вместо слов (слот [1], слот [2], слот [3], и т.д.), так что вы можете просто позвонить все с for /L цикла:

setlocal enabledelayedexpansion 
for /L %%A in (1,1,3) do echo !slot[%%A]! 
+1

Не совсем. Вы либо используете '! LF!' (В этом случае 'NL' не требуется), либо'% NL% '. – dbenham

+0

Если% NL% переводит на символ новой строки, что же делает! NL! делать? – SomethingDark

+0

Чтобы ответить на мой собственный вопрос, '! NL!' Печатает символ '^', за которым следуют символы _two_ newline. – SomethingDark

1
@ECHO OFF 
SETLOCAL 
SET "slotone=Sword" 
SET "slottwo=Shield" 
SET "slotthree=Rock" 

SET "inventory=slotone slottwo slotthree" 

ECHO Way the first 
FOR %%a IN (%inventory%) DO CALL ECHO(%%%%a%% 
ECHO ========================== 

ECHO Way the second 
FOR %%a IN (%inventory%) DO IF DEFINED %%a CALL ECHO(%%%%a%% 
ECHO ========================== 

ECHO Way the third 
FOR %%a IN (%inventory%) DO FOR /f "tokens=1*delims==" %%b IN ('set %%a') DO ECHO(%%c 
ECHO ========================== 

ECHO Way the fourth 
FOR /f "tokens=1*delims==" %%b IN ('set slot') DO ECHO(%%c 
ECHO ========================== 

SET /a gold=200 
SET "header=Your Inventory" 
SET "trailer=You have %gold%GP" 
ECHO Way the first revisited 
FOR %%a IN (header %inventory% trailer) DO CALL ECHO(%%%%a%% 
ECHO ========================== 
ECHO Way the third revisited 
FOR %%a IN (header %inventory% trailer) DO FOR /f "tokens=1*delims==" %%b IN ('set %%a') DO ECHO(%%c 
ECHO ========================== 


GOTO :EOF 

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

Первые три способа создания списка в порядке, определенном в inventory, тогда как четвёртая зависит от переменных, начинающихся slot и производит в алфавитном порядке список переменных, присвоенных (так slot01slot02 и т.д. будет предпочтительнее - она ​​менее типирование и внутренне расширяемый)

Смежные вопросы