标题: [其他] [已解决]批处理怎样在for循环中设置带有回显回车的变量并使用? [打印本页]
作者: fish 时间: 2010-7-29 19:49 标题: [已解决]批处理怎样在for循环中设置带有回显回车的变量并使用?
代码如下:- @echo off
- setlocal enabledelayedexpansion
- for %%i in (1,2,3) do (
- set "a=echo a&echo.&echo b"
- !a!&pause>nul
- )
复制代码
预期显示结果为:
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无视我吧。。。- @echo off
- setlocal enabledelayedexpansion
- set n=^
-
-
- for %%i in (1,2,3) do (
- echo a!n!!n!b
- pause>nul
- )
复制代码
作者: 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)
复制代码
[ 本帖最后由 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就不好用了呢?还有就是如果我这样写- @echo off
- set "a=echo a&echo.&echo b"
- %a%
- 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楼 的帖子
- @echo off&setlocal enabledelayedexpansion
- set "a=echo a&echo.&echo b"
- !a!
- 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=^只空一行,只有一个回车符,那么将是续行作用,复制代码
就回相当于:复制代码
空两行相当于:
- set n=(回车符)
- 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 |