Board logo

标题: [文件操作] 批处理使用&连接两条命令和不使用&有何区别? [打印本页]

作者: lyonamstrong    时间: 2016-9-12 15:09     标题: 批处理使用&连接两条命令和不使用&有何区别?

本帖最后由 pcl_test 于 2016-9-12 19:41 编辑

setlocal enabledelayedexpansion
set a=1 & echo %a%答案是1
set a=1 echo %a%不回显

1请问不回显还是显示为空?我并没有echo off
2请问
set a=1 & echo %a%

set a=1
echo %a%
有区别吗?这里的&能理解成是回车吗?

请老师不吝赐教
作者: wskwfkbdn    时间: 2016-9-12 15:24

set是定义变量,上面使用&连接符是两条命令
作者: DiamondbacK    时间: 2016-9-12 15:26

解释器解释流程:
  1. set a=1 & echo %a%
  2. ->
  3. set a=1 & echo
  4. 输出 (set 无输出,echo 有输出):
  5. ECHO 处于打开状态。
  6. 赋值:
  7. "%a%" == "1 "
复制代码
  1. set a=1 echo %a%
  2. ->
  3. set a=1 echo
  4. 无输出
  5. 赋值:
  6. "%a%" == "1 echo "
复制代码
  1. set a=1
  2. 无输出
  3. 赋值:
  4. "%a%" == "1"
  5. echo %a%
  6. ->
  7. echo 1
  8. 输出:
  9. 1
复制代码
是否回显,以及回显是什么,你可以自己测试。
作者: lyonamstrong    时间: 2016-9-12 15:27

本帖最后由 lyonamstrong 于 2016-9-12 15:36 编辑

回复 2# wskwfkbdn
如果是2条命令,那么请至问题2
这么说吧,
step1 & step2 & step3 etc

step1
step2
step3
etc
这两者有没有区别?&的硬性往下执行的作用在这里能体现吗?
作者: Batcher    时间: 2016-9-12 18:45

回复 4# lyonamstrong


主要区别是在预处理方面有所不同,多看几篇预处理相关的文章就能体会。
http://bbs.bathome.net/thread-3768-1-1.html
作者: 诗歌王位    时间: 2016-9-14 08:05

【代码引用】
set a=1 & echo %a%

set a=1
echo %a%
【代码分析】
1.&只是语句连接符
2.上述两者是没有区别的,前提是采用的变量延迟(采用了延迟变量就要替换%%为!!了)
3.批处理是自上而下,逐条执行的,预处理的时候会把整条语句读入内存的,所以第一个语句会出错
【代码修改1】
  1. @echo off
  2. set a=0
  3. set a=1 & echo 这是语句在一起的a:%a%
  4. set a=1
  5. echo 这是语句分开后的a:%a%
  6. pause
复制代码
【代码修改2】
  1. @echo off &setlocal enabledelayedexpansion
  2. set a=0
  3. set a=1 & echo 这是语句在一起的a:!a!
  4. set a=1
  5. echo 这是语句分开后的a:!a!
  6. pause
复制代码

作者: lyonamstrong    时间: 2016-9-14 15:09

回复 6# 诗歌王位


    好的,谢谢答疑!




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