Board logo

标题: [其他] [已解决]批处理怎样在for循环中设置带有回显回车的变量并使用? [打印本页]

作者: fish    时间: 2010-7-29 19:49     标题: [已解决]批处理怎样在for循环中设置带有回显回车的变量并使用?

代码如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (1,2,3) do (
  4.     set "a=echo a&echo.&echo b"
  5.     !a!&pause>nul
  6. )
复制代码
预期显示结果为:
a

b
a

b
a

b
可是,实际显示结果为:
a&echo.&echo b
a&echo.&echo b
a&echo.&echo b
请问各位老师该如何设计这个代码?

[ 本帖最后由 fish 于 2010-7-30 15:22 编辑 ]
作者: defanive    时间: 2010-7-29 20:58

LZ无视我吧。。。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=^
  4. for %%i in (1,2,3) do (
  5.     echo a!n!!n!b
  6.     pause>nul
  7. )
复制代码

作者: broly    时间: 2010-7-29 21:16

  1. @echo off
  2. set "a=echo a&echo.&echo,b"
  3. for %%i in (1,2,3) do (%a%&pause>nul)
复制代码

[ 本帖最后由 broly 于 2010-7-29 21:39 编辑 ]
作者: fish    时间: 2010-7-29 21:34

原帖由 defanive 于 2010-7-29 20:58 发表
LZ无视我吧。。。@echo off
setlocal enabledelayedexpansion
set n=^


for %%i in (1,2,3) do (
    echo a!n!!n!b
    pause>nul
)


如此强大的代码怎么能无视掉呢?前辈能否详细说说原理啊,晚辈在此感激涕零。。。
作者: fish    时间: 2010-7-29 21:57

原帖由 broly 于 2010-7-29 21:16 发表
@echo off
set "a=echo a&echo.&echo,b"
for %%i in (1,2,3) do (%a%&pause>nul)

这位前辈的答案也很好,但是我很奇怪为什么在for里面set就不好用了呢?还有就是如果我这样写
  1. @echo off
  2. set "a=echo a&echo.&echo b"
  3. %a%
  4. pause>nul
复制代码
显示的结果是:
a

b
那么我偏要显示a&echo.&echo b,那又应该怎么写呢?
总结一下这相当于两类大问题,四个小问题,就是:
1、在for中我想显示换行符时与不想显示时分别该怎么写?
2、不在for中我想显示换行符时与不想显示时又分别该怎么写呢?
希望前辈您能不吝赐教,晚辈在此多谢了。。。

[ 本帖最后由 fish 于 2010-7-29 21:58 编辑 ]
作者: broly    时间: 2010-7-29 22:47     标题: 回复 5楼 的帖子

  1. @echo off&setlocal enabledelayedexpansion
  2. set "a=echo a&echo.&echo b"
  3. !a!
  4. pause>nul
复制代码



这些是变量嵌套的问题。你去教学区搜索相关帖子
作者: broly    时间: 2010-7-29 22:51     标题: 回复 4楼 的帖子

其实每换一行都会有一个看不见的符号:换行符,即回车
如果 set n=^       就是利用转义符^把换行符的功能消除,起到续行的作用

这样你理解吗?
作者: poxi    时间: 2010-7-30 10:14

这么难的问题....偶不会的说...
还有...一个变量干吗要多行呢...?
作者: broly    时间: 2010-7-30 10:22

建议你看一些相关教程先,有了总体的知识概念,这样才比较容易理解。
作者: fish    时间: 2010-7-30 12:10

原帖由 broly 于 2010-7-29 22:51 发表
其实每换一行都会有一个看不见的符号:换行符,即回车
如果 set n=^       就是利用转义符^把换行符的功能消除,起到续行的作用

这样你理解吗?

仔细想了一下,但还是有些糊涂,为什么在set n=^之后要输入两个换行符(即回车)才管用啊,继续求详解,多谢了!

[ 本帖最后由 fish 于 2010-7-30 12:12 编辑 ]
作者: broly    时间: 2010-7-30 12:49     标题: 回复 10楼 的帖子

你要知道,两行之间才会有一个回车符
如果 set n=^只空一行,只有一个回车符,那么将是续行作用,
  1. set n=^
  2. for.........
复制代码
就回相当于:
  1. set n=(回车符)for..........
复制代码
空两行相当于:
  1. set n=(回车符)
  2. for..........
复制代码

作者: fish    时间: 2010-7-30 15:20

原帖由 broly 于 2010-7-30 12:49 发表
你要知道,两行之间才会有一个回车符
如果 set n=^只空一行,只有一个回车符,那么将是续行作用,set n=^

for.........就回相当于:set n=(回车符)for..........空两行相当于:
set n=(回车符)
for..........

多谢broly前辈,讲解的相当明白,感激不尽啊,问题解决了,再次感谢关注该问题的所有前辈。。。
作者: caruko    时间: 2010-7-30 18:03

直接在 CMD中输入^ 然后回车看效果。再试试连续输入2行^




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2