本帖最后由 踏沙行 于 2018-7-20 12:32 编辑
@的用法,按常规说法是:本行命令不显示(在控制台)
但在下面的实例中,这一用法却非常困惑,请大神指点
例:在test02.txt中,保存以下内容:- aldskfj zsdlf dblkj
- 不灭星辰诀 巅峰黑客
- xxdl DDty 123ft
- 重生之修真霸道 张天扬 至尊无赖
复制代码 1、完整显示test02.txt的内容,代码如下:- 1.方法一:
- @echo off
- for /f "delims=" %%i in (test02.txt) do echo.%%i
- pause
-
- 1.方法二:
- @echo off
- for /f "delims=" %%i in (test02.txt) do @echo.%%i
- pause
复制代码 【问】方法二使用了@echo %%i,为什么还显示结果呢?
2、对test02.txt内容排序- 2.方法一:echo前加@
- @echo off
- (for /f "delims=" %%i in (test02.txt) do @echo.%%i) |sort
- pause
-
- ====结果=========
- aldskfj zsdlf dblkj
- xxdl DDty 123ft
- 不灭星辰诀 巅峰黑客
- 重生之修真霸道 张天扬 至尊无赖
复制代码
- 2.方法二:echo前不加@
- @echo off
- (for /f "delims=" %%i in (test02.txt) do echo.%%i) |sort
- pause
-
- ========结果========
-
-
-
-
-
- aldskfj zsdlf dblkj
- I:\>echo.aldskfj zsdlf dblkj
- I:\>echo.xxdl DDty 123ft
- I:\>echo.不灭星辰诀 巅峰黑客
- I:\>echo.重生之修真霸道 张天扬 至尊无赖
- xxdl DDty 123ft
- 不灭星辰诀 巅峰黑客
- 重生之修真霸道 张天扬 至尊无赖
复制代码 【区别】方法二未在echo前加@,不仅显示了多个命令行,而且开始还有好多空行。
【疑惑】for 使用的是逐行输出,所以输出结果会出现4行命令,但是:
(1)为什么开头还有好多空行?
(2)为什么4行命令会出现在输出内容的中间部分,而不是一行命令,一行输出结果呢?
3、对test02.txt的所有字段排序(即以空格分开的字段排序)- 3.方法一,do后面加括号
- @echo off
- (for /f "delims=" %%i in (test02.txt) do (@for %%a in (%%i) do @echo.%%a)) |sort
- pause
-
- =====结果========
-
-
-
-
- 123ft
- aldskfj
- dblkj
- DDty
- I:\>()
- I:\>()
- I:\>()
- I:\>()
- xxdl
- zsdlf
- 不灭星辰诀
- 巅峰黑客
- 张天扬
- 至尊无赖
- 重生之修真霸道
复制代码
- 3.方法二:do后面不加括号
- @echo off
- (for /f "delims=" %%i in (test02.txt) do @for %%a in (%%i) do @echo.%%a) |sort
- pause
-
- =======结果正确======
- 123ft
- aldskfj
- dblkj
- DDty
- xxdl
- zsdlf
- 不灭星辰诀
- 巅峰黑客
- 张天扬
- 至尊无赖
- 重生之修真霸道
复制代码
- 3.方法三:使用括号,但在括号前加@
- @echo off
- (for /f "delims=" %%i in (test02.txt) do @(for %%a in (%%i) do @echo.%%a)) |sort
- pause
-
- ===结果同上:正确=====
复制代码 【疑惑】
1、3.方法二中,在in后面有两个do,又加使用括号,cmd为什么还能正确解析呢?
2、3.方法一中,为什么仅仅在第一个do前面加了括号,就多出来好多空行和命令行呢?
3、@的作用,不应该是作用本行,而应该是作用本命令、本括号吗? |