第 16 楼
发表于 2009-04-11 08:46 · 中国 贵州 遵义 电信
初级用户
★
积分 20
发帖 20
注册 2009-04-10 03:30
17年会员
UID 142557
性别 男
状态 离线
第 17 楼
发表于 2009-04-11 12:14 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
受15楼启发,把代码精简了下
@echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do set/p a=%%a<nul|more
第 18 楼
原来还可以这样用
发表于 2009-04-11 13:15 · 中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
换一种方法也可以。
可是不明白是什么意思
@echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do cd.|echo.%%a
@echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do echo.%%a>>aa.txt|rem
type aa.txt
[
Last edited by netbenton on 2009-4-11 at 11:23 ]
第 19 楼
发表于 2009-04-11 20:39 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
这样试试看
echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do pause>nul|echo.%%a
pause
pause>nul|echo.是否显示
第 20 楼
发表于 2009-04-11 20:43 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
第 21 楼
发表于 2009-04-11 20:56 · 中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
测试了一下,17楼以后的方法虽然代码精简了,可是太耗时了,用时27到60毫秒,
而15楼的用时才1毫秒
第 22 楼
发表于 2009-04-11 21:28 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
第 23 楼
发表于 2009-04-11 21:37 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
不明白
pause>nul|echo 为什么会显示出来
第 24 楼
发表于 2009-04-11 21:47 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
pause>nul|echo 为什么会显示出来>con|echo 这里也显示出来>con|echo 这里是三行
还有上面的代码在命令行窗口重复运行,显示结果不一样
这是怎么回事

第 25 楼
发表于 2009-04-11 21:48 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
pause>nul|echo 为什么会显示出来>con|echo 这里也显示出来>con|echo 这里是三行
还有上面的代码在命令行窗口重复运行,显示结果不一样
这是怎么回事
第 26 楼
发表于 2009-04-11 21:50 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
===================
为什么会显示出来
这里也显示出来
这里是三行
==================
为什么会显示出来
这里是三行
这里也显示出来
=================
出现上面两种显示结果

第 27 楼
发表于 2009-04-11 21:54 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
经多示试验还有显示
========================
这里也显示出来
这里是三行
为什么会显示出来
=====================
汗,会不会出现6种结果~~~~
第 28 楼
发表于 2009-04-12 00:39 · 中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
经试验,最快的是15楼的代码1毫秒,然后是17楼27毫秒,最后是18楼40~50毫秒
不明白的是:为什么用内部命令时反而比more外部命令慢?
我的猜想:
为什么17楼后的代码会起到变量延迟的作用?
是因为在进行管道操作时,已“跑”出批处理程序的外面,也就是把控制权交给了其它外部程序。
而使用外部命令more时,直接交给了more.exe,但是使用内部命令时,应该是交给了另外一个命令解释器,也就是另外调用一次cmd.exe, 然后执行它的一个内部命令。
因为运行一次cmd.exe的速度比运行一次more.exe的速度要慢,所以用more时的速度更快一点。
上面只是我的一个猜想。
第 29 楼
发表于 2009-04-12 01:23 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
应该是管道命令的作用,管道命令后的more换成能接受流的findstr也可以
@echo off
set 123=%systemroot%
setlocal enabledelayedexpansion
for /f "delims=" %%a in (b.txt) do echo.%%a|findstr .
pause
第 30 楼
发表于 2009-04-12 01:24 · 中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
上面的setlocal enabledelayedexpansion 可以去掉
@echo off
set 123=%systemroot%
for /f "delims=" %%a in (b.txt) do echo.%%a|findstr .
pause
论坛跳转: