批处理文件是否支持多行变量

时间:2010-07-20 21:41:04

标签: windows batch-file

如果是这样怎么样?

是的,批处理文件是蹩脚的,但是我不能使用powershell,我不想写一个真正的应用程序来完成这个简单的任务....

修改

我想要的是

中的某些东西
set var="this is a 
multi 
line 
string "

9 个答案:

答案 0 :(得分:21)

或者你可以创建一个“真正的”换行符。

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.技巧是不可能的(这对于简单有用)任务)。

答案 1 :(得分:14)

可以吗?

@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

答案 2 :(得分:3)

SET myFlags= ^
    a ^
    b ^
    c

答案 3 :(得分:1)

现在 - 没有辅助SET命令:

echo this is a & echo multi & echo line & echo string

答案 4 :(得分:1)

这是一个非常古老的问题,但我整合了@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!

答案 5 :(得分:0)

如果你只是想用它来输出变量行,我希望这对你有用。

受某些事物的启发,我觉得这很有效。

  

对于正常命令提示符中的代码:

     

set this=echo hi ^& echo bye

     

%this%

它给出了以下两行:

hi
bye

在命令提示符窗口中。

使用^字符的原因:

命令提示符会识别您要运行两个命令,以便您需要添加此字符,告诉命令提示符将下一个字符识别为符号,而不是为它做任何特殊操作。

答案 6 :(得分:0)

如果你想构建一些东西,而不仅仅是输出,希望这对你也有用。

首先,你应该制作一个文件。例如.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为什么)。因此,我想并使这些代码产生同样的效果。

答案 7 :(得分:0)

我更喜欢这种方法

@ECHO OFF
SETLOCAL EnableDelayedExpansion

REM (define NewLine character)
(SET _NL=^
%=this line is empty=%
)

答案 8 :(得分:0)

我想我明白了。将^放入字符串时,我必须将%NL%添加到%NL%变量中,否则它将在第一个set NL=^& echo set str=text on line 1 ^%NL% text on line 2 echo %str% text on line 1 text on line 2 之后隐藏文本,因为它是在设置时执行的,而不是在被回显时执行的以后

#include <stdio.h>

void maxVectorSwap( int *v, size_t dim )
{
    size_t max_i = 0;

    for ( size_t i = 1; i < dim; i++ )
    {
        if ( v[max_i] < v[i] )  max_i = i; 
    }

    if ( max_i != 0 )
    {
        int tmp = v[0];
        v[0] = v[max_i];
        v[max_i] = tmp;
    }
}

int main(void) 
{
    int a[] = { 3, 5, 1, 7, 2 };
    size_t n = sizeof( a ) / sizeof( *a );

    for ( size_t i = 0; i < n; i++ ) printf( "%d ", a[i] );
    putchar( '\n' );

    maxVectorSwap( a, n );

    for ( size_t i = 0; i < n; i++ ) printf( "%d ", a[i] );
    putchar( '\n' );

    return 0;
}