注册 登录
编程论坛 Windows论坛

Dos命令

yz1025 发布于 2013-02-01 13:27, 255 次点击
若我在Dos中下命令
D:\1>D:1\1.exe 111.txt
可以运行~但是当我把目录切换到C:\1\中变成
C:\1>D:1\1.exe 111.txt
就无法运行~这都是怎么解决的?

若要在任意位置运行执行档~命令要怎下?
(不去变动系统预设路径)
28 回复
#2
TonyDeng2013-02-01 17:05
C:\1>D:\1\1 D:\1\111.txt

btw: 注意你程序中的输出路径!
#3
yz10252013-02-04 11:33
以下是引用TonyDeng在2013-2-1 17:05:25的发言:

C:\1>D:\1\1 D:\1\111.txt

btw: 注意你程序中的输出路径!


就算这样改也一样会提示执行档不是系统内置的~
试的结果看似因为>前所在Localation的关系~目前使用替代方案解决~
但是还是想知道~因为以后还是会遇到~
#4
TonyDeng2013-02-04 12:31
对,就是因为你的程序中没有设置搜索路径。可以在DOS下设PATH,或在程序中附加。如果你的文档在程序所在目录下的文件树内,可以在程序中设置启动目录为根的相对路径。
#5
wp2319572013-02-04 13:23

E:\1>d:\1\www.exe d:\1\www.txt

E:\1>

做了一个简单的测试  测试是成功的 带完整的路径名的 是不需要制定path的
#6
TonyDeng2013-02-04 13:25
你不知道他程序内使用了什么路径,不要乱说测试成功。
#7
wp2319572013-02-04 13:26
不懂t版的话  和path无关滴
#8
TonyDeng2013-02-04 13:29
程序内如果有输入输出功能,它极可能设置了文件路径,会带绝对路径,变换了程序的启动目录,但输入输出仍然会在设定的那个路径中读写,一旦那个路径不存在了,就出错。诸如目录没有创建就读写文件之类,极容易发生。

[ 本帖最后由 TonyDeng 于 2013-2-4 13:31 编辑 ]
#9
wp2319572013-02-04 13:30
那倒是  我是用记事本(windows自带)做的测试  windows用的是相对路径 还是绝对路径 ??
#10
TonyDeng2013-02-04 13:36
普通正常的设计都是相对路径,但要指定虚拟根目录(往往是程序启动的目录),也有需要绝对路径的,这不能乱猜,要看程序是怎么写的。通常,程序使用的应该是自己虚拟根目录下的文件树,那才是自己有绝对管理权限的,如果它要跨越到外部的目录,就必须仔细考虑对方是否存在及自己有没有权限的问题。写程序,一定要注意被移动了启动目录,不要把启动目录硬编码在程序中,要依据启动时所在的目录而变换。
#11
yz10252013-02-04 17:51
今天找到解答了~重点在于所处位置的移动~由DOS命令设定path应该也是一种解法~但是测试后好像会干扰到系统原本设置的路径~整台电脑就怪怪的~
所以在BAT档内指示所在位置先移动到执行档位置~然后再执行就OK了~

测试了3种运行模式~重点在于启始位置移动到执行档位置的问题~加上BAT档好像不吃网路路径~所以要在客户端指示服务端执行程式时~
就要变成客户端的BAT呼叫服务端的BAT服务端的BAT再去呼叫~服务端的执行档再依据给予的参数运行应该做的程序~
这让我想起来头文字D的一幕~飘移的要诀在于重心的转移~
等于远端执行任务的秘诀在于位置的切换~
#12
TonyDeng2013-02-04 17:53
在设PATH的时候,可以加%PATH%保留原来的设置,你新加的路径追加在后面就可以了。网络路径也是可以的。
#13
yz10252013-02-04 17:59
以下是引用TonyDeng在2013-2-1 17:05:25的发言:

C:\1>D:\1\1 D:\1\111.txt

btw: 注意你程序中的输出路径!


所以这行要改成~1.bat
---------------------
echo on
cls
D:
cd 1
11.bat D:\1\111.txt
pause
exit
---------------------

若要一行解决就得连结虚拟磁盘~使用虚拟路径去执行程序~先把Z盘对应到D:\1~
再运行DOS命令...
Z:\11.bat D:\1\111.txt
#14
yz10252013-02-04 18:00
回复 12楼 TonyDeng
这我会再试试看~
#15
TonyDeng2013-02-04 18:05
echo on
cls
D:
cd \1
11.bat D:\1\111.txt
pause
exit
------------------------
D:只是切换到磁盘D:的当前目录,不要想当然此时正在D:的根目录,你后面cd 1有可能进不了D:\1。

D:\1\11.bat这样是用于不管当前在何处目录均能启动相应批处理的,而11.bat必须当前目录在这个批处理的文件夹下。换言之,前者有可能在11.bat执行过程中遇到当前目录不符的问题,而后者必须事先把当前目录切换到正确的位置。但无论如何,你都硬性指定了.txt在D:的位置。
#16
yz10252013-02-04 18:41
会吗?
因为TXT是当参数输入执行档运行的~主要是执行档位置和当前所在位置不同导致无法运行~而后面的TXT绝对路径~
经由参数型态输入到执行档命令接口~再使用VB6 FSO依据参数的字符串~去搜到该笔资料位置进行程序~

能否给个范例?不使用BAT和虚拟磁盘的情况下~
不知道怎设定path指到指定位置运行程序的一行DOS命令~
#17
yz10252013-02-04 18:46
回复 15楼 TonyDeng
我想你的意思是我进D就可以了~而BAT路径用绝对路径带入~
这样所处位置在D盘最顶层~以保日后要运行其他不同子路径命令~需要再切回来的意思~
就是批处理的其他行命令~
#18
TonyDeng2013-02-04 18:52
要知道你程序内部怎么使用文件名才行。
我现在要外出吃饭,回来再看看。
#19
wp2319572013-02-04 18:56
原来t版还需要吃饭啊
#20
yz10252013-02-04 20:15
灵异似的~不知道改到什么~居然OK了~
要飘移不用再重心转移技术了~哈~
从二驱变四驱了~还是搞不明白~

但是我还是想知道上面问题的答案~
#21
yz10252013-02-04 20:17
要这样灌下去~要不先把这帖先移到水区去~
#22
TonyDeng2013-02-05 03:57
我不知道你程序内部干了什么,就给你解释一下原理吧。

假设你的程序所在目录为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指令。
#23
yz10252013-02-05 10:03
原来加个反斜线在于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 编辑 ]
#24
yz10252013-02-05 10:15
哇....结果一样~D root还是变成D:\ 1
只有本站会员才能查看附件,请 登录


喔~重点在下一句~
只有本站会员才能查看附件,请 登录


[ 本帖最后由 yz1025 于 2013-2-5 10:23 编辑 ]
#25
wp2319572013-02-05 10:55
cd 1 表示相对路径  也就是1下的1  可能没有 所以系统提示找不到
cd \1 则表示绝对路径
#26
TonyDeng2013-02-05 13:09
对呀,你看24楼第二幅图:在初始时,每个盘号都默认在根目录下,转过去是在根目录的,但问题是你变动过目录之后,它就会留在那个目录中,不会自动返回根目录的,所以你看到,cd 1之后,再cd 1就出问题了,因为此时当前目录已经在cd:\1处,再要cd 1,就要求进入下一层,恰好没有这样的层让它进入。而cd \1则不同,\是强制要求从根目录开始进入的,一定不会错。
#27
yz10252013-02-05 14:41
其实原本我一直以为相对路径一定会有个点~来表示以此为始~相对的位置~
./
../
../
.\
..\
一堆乱七八糟的表示法~好像有时也跟操作系统有关~
#28
TonyDeng2013-02-05 14:44
呵呵,不用./..也是常规用法。只要不往前走,向后走是可以不用.的,那两个东西只是为了向前走而设置的记号。
#29
刺冢2013-02-15 18:43
没懂
1