首页 文章

长命令在Windows Vista批处理(.bat)文件中分割为多行

提问于
浏览
595

如何使长命令在Windows(Vista)批处理文件中多行?

5 回答

  • 57

    多个命令可以放在括号中并分布在多个行中;所以像 echo hi && echo hello 这样的东西可以像这样:

    ( echo hi
      echo hello )
    

    变量也可以帮助:

    set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE"
    if exist %AFILEPATH% (
      start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING...
    ) else (
    ...
    

    另外我注意到了#336016_,只有在有空格的情况下 if 条件才喜欢它们:

    if exist ^
    
  • 13

    然而,似乎在for循环的值的中间分割不需要插入符号(实际上尝试使用一个将被视为语法错误) . 例如,

    for %n in (hello
    bye) do echo %n
    

    请注意,在hello之后或再见之前甚至不需要空格 .

  • 8

    只要您记住插入符号及其后面的换行符被完全删除,您就可以使用插入符号 ^ 分解长行 . 因此,如果应该有一个空间,你要打破线,包括一个空格 . (More on that below.

    例:

    copy file1.txt file2.txt
    

    将写成:

    copy file1.txt^
     file2.txt
    
  • 227

    插入符号的规则是:

    在行尾的插入符号附加下一行,附加行的第一个字符将被转义 .

    您可以多次使用插入符号,但完整的行不得超过〜8192个字符的最大行长度(Windows XP,Windows Vista和Windows 7) .

    echo Test1
    echo one ^
    two ^
    three ^
    four^
    *
    --- Output ---
    Test1
    one two three four*
    
    echo Test2
    echo one & echo two
    --- Output ---
    Test2
    one
    two
    
    echo Test3
    echo one & ^
    echo two
    --- Output ---
    Test3
    one
    two
    
    echo Test4
    echo one ^
    & echo two
    --- Output ---
    Test4
    one & echo two
    

    要禁止转义下一个字符,可以使用重定向 .

    重定向必须在插入符号之前 . 但是在插入符号之前存在一个重定向的好奇心 .

    如果您在插入符号处放置令牌,则会删除该令牌 .

    echo Test5
    echo one <nul ^
    & echo two
    --- Output ---
    Test5
    one
    two
    
    
    echo Test6
    echo one <nul ThisTokenIsLost^
    & echo two
    --- Output ---
    Test6
    one
    two
    

    并且还可以 embed line feeds 进入字符串:

    setlocal EnableDelayedExpansion
    set text=This creates ^
    
    a line feed
    echo Test7: %text%
    echo Test8: !text!
    --- Output ---
    Test7: This creates
    Test8: This creates
    a line feed
    

    空行对于成功至关重要 . 这仅适用于延迟扩展,否则换行后将忽略该行的其余部分 .

    它起作用,因为行末端的插入符号忽略下一个换行符并转义下一个字符,即使下一个字符也是换行符(在此阶段总是忽略回车符) .

  • 744

    (这基本上是Wayne's answer的改写,但是由于插入符号的混乱被清除了 . 所以我对编辑答案并不害羞,但 completely rewriting them 似乎不合适 . )

    您可以使用插入符分隔长行( ^ ),只需记住插入符号及其后面的换行符将完全从命令中删除,因此如果您将其放在需要空格的位置(例如参数之间),请一定要包括空格(在_336000之前,或者在下一行的开头 - 后一个选择可能有助于使它更清晰,这是一个延续) .

    示例:(所有在Windows XP和Windows 7上测试过)

    xcopy file1.txt file2.txt
    

    可以写成:

    xcopy^
     file1.txt^
     file2.txt
    

    要么

    xcopy ^
    file1.txt ^
    file2.txt
    

    甚至

    xc^
    opy ^
    file1.txt ^
    file2.txt
    

    (最后一步是因为 xc^ 之间没有空格,下一行开头没有空格 . 所以当你删除 ^ 和换行符时,你得到...... xcopy . )

    为了便于阅读和理智,最好只在参数之间进行分解(确保包含空格) .

    确保 ^not 批处理文件中的最后一件事,因为appears to be a major issue with that .

相关问题