代码之家  ›  专栏  ›  技术社区  ›  Byron Whitlock

批处理文件支持多行变量吗

  •  17
  • Byron Whitlock  · 技术社区  · 15 年前

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

    编辑

    set var="this is a 
    multi 
    line 
    string "
    
    8 回复  |  直到 15 年前
        1
  •  23
  •   jeb    14 年前

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

    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. 技巧(对于简单的任务很有用)。

        2
  •  17
  •   T1000    15 年前

    @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
    
        3
  •  5
  •   Fabricio    11 年前
    SET myFlags= ^
        a ^
        b ^
        c
    
        4
  •  1
  •   AlexL    12 年前

    现在-没有辅助设置命令:

    echo this is a & echo multi & echo line & echo string
    
        5
  •  1
  •   Tom    10 年前

    这是一个非常古老的问题,但我将@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!
    
        6
  •  1
  •   Arnold Lai    7 年前

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


    受某些东西的启发,我发现这个很管用。

    set this=echo hi ^& echo bye

    %this%

    它给出了以下两行:

    hi
    bye
    


    使用 ^ 人物:

        7
  •  1
  •   SwiftNinjaPro    6 年前

    我想我知道了。我不得不补充一句 ^ %NL% var,否则它将在第一个 %荷兰% 因为它是在设置时执行的,而不是在以后回显时执行

    set NL=^& echo
    
    set str=text on line 1 ^%NL% text on line 2
    
    echo %str%
    text on line 1
    text on line 2
    
        8
  •  0
  •   jraufeisen    7 年前

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


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

        9
  •  0
  •   Blackkatt    6 年前

    @ECHO OFF
    SETLOCAL EnableDelayedExpansion
    
    REM (define NewLine character)
    (SET _NL=^
    %=this line is empty=%
    )
    
    推荐文章