Если так, как?
Да, пакетные файлы хромые, но я не могу использовать powershell, и я не хочу писать реальное приложение, чтобы выполнить эту простую задачу.
изменить
То, что я хочу, это что-то вроде строк
set var="this is a
multi
line
string "
Если так, как?
Да, пакетные файлы хромые, но я не могу использовать powershell, и я не хочу писать реальное приложение, чтобы выполнить эту простую задачу.
изменить
То, что я хочу, это что-то вроде строк
set var="this is a
multi
line
string "
Или вы можете создать "настоящий" символ новой строки.
setlocal enableDelayedExpansion
set NL=^
rem two empty line required
echo first line !NL! second line
set multi=Line1!NL!Line2
set multi=!multi!!NL!Line3
echo !Multi!
В этом варианте новая строка является "нормальным" символом в строке, поэтому переменные действуют нормально, и вы можете назначить их другой переменной, это невозможно с трюком &echo.
(что полезно для простых задач).
Это нормально?
@echo off
set var=kur
set var2=kur2
echo var is = "%var%" and var2 is = %var2%
изменить
это то, что вы имеете в виду?
@echo off
set nl=^& echo.
echo this%nl%is%nl%multiline%nl%string
SET myFlags= ^
a ^
b ^
c
И теперь - без вспомогательных команд SET:
echo this is a & echo multi & echo line & echo string
Это довольно старый вопрос, но я собрал гибрид решений от @Fabricio и @jeb, которые работали корректно и добавили некоторую читаемость:
setlocal enableDelayedExpansion
set NL=^
rem two empty line required
set var=this is a !NL! ^
multi !NL! ^
line !NL! ^
string !NL!
echo !var!
Если вы просто хотите использовать его для вывода строк переменных, я надеюсь, что это будет полезно для вас.
Вдохновленный чем-то, я нашел это работающим.
Для кодов в обычной командной строке:
set this=echo hi ^& echo bye
%this%
Он выдает две следующие две строки:
hi
bye
в окне командной строки.
Причина использования символа ^
:
Командная строка должна указывать, что вы хотите запустить две команды, поэтому вам нужно добавить этот символ, который говорит командной строке распознавать следующий символ как символ, а не делать для него ничего особенного.
Если вы хотите что-то создать, а не просто выводить данные, надеюсь, это будет полезно и вам.
Во-первых, вы должны сделать файл. Такие как .txt
. Я собираюсь использовать var.txt
в качестве примера.
Во-вторых, введите несколько строк переменных.
В-третьих, вот коды, но работает только для партии:
@echo off set num=0 set /p this%num%=<"var.txt" goto there :there set /a num=num+1 for /f "skip=%num%" %%a in (var.txt) do (set this%num% =%%a goto there) set num=0 goto build :build rem Example of using multi-lines of variable. call echo %%this%num% %% set /a num=num+1 for /f "skip=%num% delims=" %%a in (var.txt) do (call echo %%this%num% %% goto build) rem Just replace the commands with 'echo' part into something else which suits your situation. pause >nul exit
Я признаю, что, строго говоря, это не многострочная переменная, но, на мой взгляд, это лучше, чем ничего.
Вы можете спросить, почему бы просто не использовать команду setlocal EnableDelayedExpansion
. Причина в том, что эта команда действительно работает для меня (IDK почему). Поэтому я подумал и сделал эти коды, которые дают одинаковый эффект.
Я предпочитаю этот метод
@ECHO OFF
SETLOCAL EnableDelayedExpansion
REM (define NewLine character)
(SET _NL=^
%=this line is empty=%
)
Я думаю, что я понял это. Мне пришлось добавить ^
к %NL%
при помещении его в строку, в противном случае он скрывает текст после первого %NL%
потому что он выполняется при установке, а не когда он выводится позже
set NL=^& echo
set str=text on line 1 ^%NL% text on line 2