|
verber34
初级用户
 
积分 52
发帖 19
注册 2006-9-8
状态 离线
|
『楼 主』:
学习批处理,不懂的命令!请进
1.刚刚学习批处理,下载了本网站中的示范,有一个不懂的命令:
显示C-Z盘:
set disk=cdef......... (不写了..)
for /L %%a in (1,1,24) do call echo %%disk~%%a,1%%
请问: 这里的 call 是什么意思? 它不是用来调用另一个批处理吗??
把它取了,运行就不正常了!
还有一个: 为什么调用disk时,需要写成%%disk%%,而不是%disk%
..本人愚昧~~还请高手解答!!
|
|
2006-12-31 01:52 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
2 楼』:
在本论坛搜索“变量延迟”就有你要的答案。
|
|
2006-12-31 01:55 |
|
|
verber34
初级用户
 
积分 52
发帖 19
注册 2006-9-8
状态 离线
|
『第
3 楼』:
..似懂非懂~~~先看看吧! 谢了!
|
|
2006-12-31 02:13 |
|
|
verber34
初级用户
 
积分 52
发帖 19
注册 2006-9-8
状态 离线
|
『第
4 楼』:
第二个问题:
|管道命令是怎么用的? 常常见到的就是 dir C: |more
这样写为什么不运行:
echo C: | dir 哪里错了??
|
|
2006-12-31 02:14 |
|
|
trickster
初级用户
 
积分 63
发帖 33
注册 2006-12-4
状态 离线
|
『第
5 楼』:
Quote: | Originally posted by verber34 at 2006-12-30 01:14 PM:
|管道命令是怎么用的? 常常见到的就是 dir C: |more
这样写为什么不运行:
echo C: | dir 哪里错了?? |
|
管道"|"的作用是将"|"前面命令的输出做为"|"后面命令的输入,dir命令是显示当前目录,而不能接收你"echo c:"的结果.举个例子:
echo y | del a\*.* 等效与 del a\*.* /q
|
|
2006-12-31 02:31 |
|
|
verber34
初级用户
 
积分 52
发帖 19
注册 2006-9-8
状态 离线
|
『第
6 楼』:
Quote: | Originally posted by trickster at 2006-12-31 02:31:
管道"|"的作用是将"|"前面命令的输出做为"|"后面命令的输入,dir命令是显示当前目录,而不能接收你"echo c:"的结果.举个 ... |
|
我的想法是, dir会接收echo 输出的C: 就会变成 dir C: 显示C盘目录...
....
但它显示是的当前文件的目录!!
对 | 管道还是不懂~~~~
|
|
2006-12-31 05:18 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
7 楼』:
Quote: | Originally posted by verber34 at 2006-12-30 16:18:
我的想法是, dir会接收echo 输出的C: 就会变成 dir C: 显示C盘目录...
....
但它显示是的当前文件的目录!!
对 | 管道还是不懂~~.. |
|
我是这样理解的:
对于管道符接受echo命令的输出,管道符(|)后面只能接上处理字符的命令,比如find findstr sort等,比如这样是可以的:
(echo d&echo b&echo c&echo a)|sort
echo www.cn-dos.net|find "china"&&echo OK||echo NO 但是这样的就不行,比如:echo /ad | dir , echo OK|echo NO_。
至于像echo y|del *.*这样的,是由于del *.*执行后,del询问用户是否删除,此时要你输入y或者n,也可以理解成del *.*接受用户输入的字符串(Y/N),也就是处理(解释)用户输入的字符串。
|
|
2006-12-31 07:09 |
|
|
dikex
高级用户
    潜水修练批处理
积分 788
发帖 366
注册 2006-12-31
状态 离线
|
『第
8 楼』:
楼主是否打错字了,~改为%,应该是这样的吧
set disk=cdef
for /L %%a in (1,1,24) do call echo %%disk%%%a,1%%
%%disk%%而不用%disk%的原因是因为使用call,这样echo这个命令在这里就是被call调用的,而%%disk%%%a,1%%都是echo这个命令的执行参数,根据批处理里面的规则,每次使用%都是要加多一个的,这个也可以写出这样,不用call命令,echo就不是被call调用了,%也不用每处多一个
set disk=cdef
for /L %%a in (1,1,24) do echo %disk%%a,1%
|
|
2006-12-31 11:57 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
9 楼』:
Quote: | Originally posted by dikex at 2006-12-30 22:57:
楼主是否打错字了,~改为%,应该是这样的吧
set disk=cdef
for /L %%a in (1,1,24) do call echo %%disk%%%a,1%%
%%disk%%而不用%disk%的原因是因为使用call,这样echo迠... |
|
楼主的确是错了,但不是错的你说的地方。下面是演示代码:
@echo off
set #=abcdefghijklmnopqrstuvwxyz
for,/l,%%$,in,(-26,1,-1)do,call,echo,%%#:~%%$,1%%
pause
[ Last edited by lxmxn on 2007-3-15 at 09:33 PM ]
|
|
2006-12-31 13:09 |
|
|
verber34
初级用户
 
积分 52
发帖 19
注册 2006-9-8
状态 离线
|
『第
10 楼』:
楼上的兄弟, 演示代码能说明什么问题? 我运行了,看不懂?
能不能给我一点 汉字说明!!
|
|
2006-12-31 23:04 |
|
|
weapfe
初级用户
 
积分 144
发帖 66
注册 2006-11-30
状态 离线
|
『第
11 楼』:
%%#:~%%$,1%%
好像是少了一个冒号吧~~
|
|
2007-1-1 06:09 |
|
|
wuyugui
初级用户
 
积分 20
发帖 8
注册 2007-1-1
状态 离线
|
『第
12 楼』:
Quote: | 楼主的确是错了,但不是错的你说的地方。下面是演示代码:[code]
@echo off&set #=abcdefghijklmnopqrstuvwxyz&(for,/l,%%$,in,(-26,1,-1)do,c ... |
|
运行了一下,效果是跟楼主不一样,楼主的是出现24个同样的字符串"cdef"
而这位大师出现的是单个字符 "a"," b"," c"," d"," e"……
这位大师能不能跟我们讲解一下%#:~%是怎样的过程呀!!还有 那括号里的语句为什么都要用逗号隔开呀,批处理的书写有什么奥秘跟我们说说呀!!
谢谢!!;)
|
|
2007-1-1 10:09 |
|
|
redtek
金牌会员
     
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
13 楼』:
关于截取字符串的各种演示,详见贴子的『第 10 楼』:
http://www.cn-dos.net/forum/view ... 4485&sid=ful3YN
|

Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2007-1-1 10:47 |
|
|
jackyggt
初级用户
 
积分 76
发帖 38
注册 2007-3-13
状态 离线
|
|
2007-3-16 08:03 |
|
|
youxi01
高级用户
   
积分 846
发帖 247
注册 2006-10-27 来自 湖南==》广东
状态 离线
|
『第
15 楼』:
TO 9F(lxmxn):
冒昧的提个建议。
在写批处理代码的时候,可以使用更加清楚,更加明晰的结构。
我们的目的不是要人看不懂,而是尽量要人能够看懂。
|
|
2007-3-16 10:27 |
|