| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 255 人关注过本帖
标题:Dos命令
只看楼主 加入收藏
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
要这样灌下去~要不先把这帖先移到水区去~

不要投我
2013-02-04 20:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我不知道你程序内部干了什么,就给你解释一下原理吧。

假设你的程序所在目录为D:\1,11.bat和111.TXT都在这个目录中。在DOS中,你现在C:\,那么执行指令D:后,一般会转到D:\(当DOS启动后没有对D:进行过操作时是这样)。这个时候,再执行CD 1,就会转入D:\1目录,注意,CD 1在目录名前没有加绝对路径,表示从当前目录开始向下进入。好了,现在当前目录是D:\1,然后,你做了其他的事,比如执行C:转到C盘——现在问题出现了,你再执行前面那个批处理,则D:这句转到D:\1上,因此你之前的操作已把D:盘的当前盘设置到D:\1这个目录上,不再是原始的D:\,这时接着执行CD 1,就要从这个目录往下找D:\1\1这个目录,看到错误了没有?

在DOS和Windows系统中,凡是没有指定绝对路径的,都从当前目录开始作相对路径,关键是当前目录是哪里!

因此,你那个批处理安全的写法应是如下:
@echo off
cls
D:
cd \1
11.bat D:\1\111.txt
pause

描红的行解释如上,是确保每次执行本批处理指令时都进入D:\1目录而不是D:当前目录的下层1目录,而不管D:的当前目录是在哪里。

对指令D:\1\11.bat D:\1\111.txt,是不管当前位于哪一个目录及任何磁盘,均执行绝对路径的批处理,但在执行11.bat的内部指令时,会出现当前目录引起的问题——假设在这个批处理中又有类似cd 1这样指令。

所以,问题的根源其实是:你反复执行了那个没有反斜线的cd 1指令。

授人以渔,不授人以鱼。
2013-02-05 03:57
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
原来加个反斜线在于CD切换时~切换C预设还是C~切换D预设就变成D:\1~这我倒没注意到~
意思是D的root被我改成D:\ 1了~这样BAT内批处理命令就大致清楚了~

图片附件: 游客没有浏览图片的权限,请 登录注册


但是回归原本问题时~
C:\>D:\1\1.exe D:\1\1.txt
为何命令这样下会出现执行档非系统内置命令?
是因为System Path没有加入D:\1这项?那完整的要怎改?
C:\>path=%D:\1%; D:\1\1.exe D:\1\1.txt  这样好像过不了~

[ 本帖最后由 yz1025 于 2013-2-5 10:17 编辑 ]

不要投我
2013-02-05 10:03
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
哇....结果一样~D root还是变成D:\ 1
图片附件: 游客没有浏览图片的权限,请 登录注册


喔~重点在下一句~
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 yz1025 于 2013-2-5 10:23 编辑 ]

不要投我
2013-02-05 10:15
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
cd 1 表示相对路径  也就是1下的1  可能没有 所以系统提示找不到
cd \1 则表示绝对路径

DO IT YOURSELF !
2013-02-05 10:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
对呀,你看24楼第二幅图:在初始时,每个盘号都默认在根目录下,转过去是在根目录的,但问题是你变动过目录之后,它就会留在那个目录中,不会自动返回根目录的,所以你看到,cd 1之后,再cd 1就出问题了,因为此时当前目录已经在cd:\1处,再要cd 1,就要求进入下一层,恰好没有这样的层让它进入。而cd \1则不同,\是强制要求从根目录开始进入的,一定不会错。

授人以渔,不授人以鱼。
2013-02-05 13:09
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
其实原本我一直以为相对路径一定会有个点~来表示以此为始~相对的位置~
./
../
../
.\
..\
一堆乱七八糟的表示法~好像有时也跟操作系统有关~

不要投我
2013-02-05 14:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
呵呵,不用./..也是常规用法。只要不往前走,向后走是可以不用.的,那两个东西只是为了向前走而设置的记号。

授人以渔,不授人以鱼。
2013-02-05 14:44
刺冢
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-2-15
收藏
得分:0 
没懂
2013-02-15 18:43
快速回复:Dos命令
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020189 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved