无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 13622|回复: 25
打印 上一主题 下一主题

请教:如何确定U盘的盘符?

[复制链接]
跳转到指定楼层
1#
发表于 2006-10-23 17:13:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位高人:我制作好了U盘dos启动盘,希望在批处理文件中运行U盘中的程序,但因用U盘启动,在不同机器上被赋予的盘符不同,有时是A,有时是C,这就使我在批文件中无法定位U盘中的程序。哪位知道如何让其自动识别盘符,使我能够在批文件中使用一个变量就可以代替U盘的盘符(无论此U盘被机器识别为A,C或其他)?先谢谢各位了!!!
2#
发表于 2006-10-23 18:12:14 | 只看该作者
不管它是A还是C,U盘上总有你特定的文件可以识别吧
回复

使用道具 举报

3#
发表于 2006-10-23 19:29:08 | 只看该作者

  1. @echo off
  2. cd\
  3. set current_driver=%cd%
  4. echo current driver is %current_driver%
  5. pause
复制代码
回复

使用道具 举报

4#
 楼主| 发表于 2006-10-23 21:14:41 | 只看该作者
谢谢楼上的帮助!我试后再告诉您结果。
不过,您可否解释一下以利于学习,谢谢!
%cd% 代表什么呢?
cd\ 是否代表回到根目录呢?
我以后在批文件中引用U盘盘符时,能否用%current_driver%代替U盘所在分区?
回复

使用道具 举报

5#
 楼主| 发表于 2006-10-23 21:24:55 | 只看该作者
原帖由 小军军 于 2006-10-23 06:12 PM 发表
不管它是A还是C,U盘上总有你特定的文件可以识别吧


有啊,但如何写这个批文件以确定U盘的相对盘符呢?请赐教。

我写了一个,但运行出错(假定我的特殊文件是在U盘根目录下,为uuzhao.txt),请指正:

@echo off
CLS
for %%i in(a b c d e f g h i j k l m n o p q r s t u v w x y z) do IF EXIST %%i:\uuzhao.txt GOTO udiskstart
goto error
:udiskstart
set dsk=
for %%i in(a b c d e f g h i j k l m n o p q r s t u v w x y z) do set dsk=%%i
PATH %dsk%:\                        --- 我把 %dsk% 当做U盘盘符
...
...
:error
echo.
echo The Flash Disk (U-disk) can not be recognized!
echo.
:end
回复

使用道具 举报

6#
发表于 2006-10-23 21:28:56 | 只看该作者
  其实这已经属于最基本的DOS命令了。

  cd\  的意思是跳转到当前路径的根目录下,%cd% 表示当前路径。要获取U盘的盘符的话,必须把这个代码放在U盘上,也只能在含有这段代码之后的代码中使用 %current_driver% 来表示U盘的盘符。值得注意的是,这个 %current_driver% 的结果是 字母+冒号+斜杠 的格式。
回复

使用道具 举报

7#
发表于 2006-10-23 21:38:41 | 只看该作者
@echo off
CLS
for %%i in(a b c d e f g h i j k l m n o p q r s t u v w x y z) do @(
   IF EXIST uuzhao.txt GOTO udiskstart
)
goto error
:udiskstart
cd /d %%i \你的工作目录(这是已经不需要在指定dsk变量了,%%i已经是u盘)
...
...
:error
echo.
echo The Flash Disk (U-disk) can not be recognized!
echo.
:end
回复

使用道具 举报

8#
 楼主| 发表于 2006-10-23 22:06:25 | 只看该作者
谢谢您的耐心解答!请您看看我的理解对不对:
---
假定:我的U盘根目录下有一个子目录:\kvtools,此子目录下有一文件 kvdos.exe
            我用U盘引导系统至dos下,系统赋予U盘盘符为A或C,我想运行 kvdos.exe

我的 autoexec.bat 是否可以这样写:

@echo off
cd\
set current_driver=%cd%
%current_driver%:\          或:  path=%current_driver%:\
cd kvdos                                     kvdos.exe
kvdos.exe

请指教!
回复

使用道具 举报

9#
 楼主| 发表于 2006-10-23 22:17:41 | 只看该作者
谢谢 wjgyz740526 朋友,我下来试试。
另外:
cd /d %%i \你的工作目录
是否应为:
cd /d %%i :\你的工作目录  ?
回复

使用道具 举报

10#
 楼主| 发表于 2006-10-24 07:47:29 | 只看该作者
wjgyz740526 朋友,我试过,不行:-(
是否应该用引号扩起: "%%i"?
另外,for %%i in(a b c d e f g h i j k l m n o p q r s t u v w x y z) do @(
   IF EXIST uuzhao.txt GOTO udiskstart)
如果找到uuzhao.txt文件,会自动将含有该文件的盘符赋值给%%i变量吗?
回复

使用道具 举报

11#
发表于 2006-10-24 07:55:48 | 只看该作者
你把你U盘的目录结构及文件名以及你的目的发上来,我来试试看
回复

使用道具 举报

12#
发表于 2006-10-24 08:16:39 | 只看该作者
原帖由 zjz 于 2006-10-24 07:47 AM 发表
wjgyz740526 朋友,我试过,不行:-(
是否应该用引号扩起: "%%i"?
另外,for %%i in(a b c d e f g h i j k l m n o p q r s t u v w x y z) do @(
   IF EXIST uuzhao.txt GOTO udiskstart)
如果 ...


正确,因为你不确定路径是否包含有空格或是特殊字符的时候,你需要用引号来确保万无一失啊
回复

使用道具 举报

13#
发表于 2006-10-24 10:22:01 | 只看该作者
使用if在有空光驱的时候会报错
回复

使用道具 举报

14#
 楼主| 发表于 2006-10-24 19:18:20 | 只看该作者
原帖由 wjgyz740526 于 2006-10-24 07:55 AM 发表
你把你U盘的目录结构及文件名以及你的目的发上来,我来试试看


U盘目录结构很简单:

根目录下的文件: autoexec.bat
                                 CONFIG.SYS
                                 COMMAND.COM
                                 MSDOS.SYS
                                 IO.SYS
根目录下有一个子目录: \kvdos
                                             \kvdos\kvdos.exe

我的目的是用U盘启动到dos,然后自动运行kvdos.exe
回复

使用道具 举报

15#
发表于 2006-10-24 20:56:09 | 只看该作者
如果是u盘启动到dos,上面的命令不需要了,你直接在autoexec.bat中添加kvdos就可以了。
回复

使用道具 举报

16#
 楼主| 发表于 2006-10-24 21:52:19 | 只看该作者
原帖由 wjgyz740526 于 2006-10-24 08:56 PM 发表
如果是u盘启动到dos,上面的命令不需要了,你直接在autoexec.bat中添加kvdos就可以了。


不可以,因为 kvdos.exe 是在kvdos目录内,不是在U盘的根目录下。

另外,我如果要是还有其他目录需要进入的话,如果不确定U盘的盘符就不方便了。
回复

使用道具 举报

17#
发表于 2006-10-24 23:57:29 | 只看该作者
  看了以上的讨论,有个疑问:你这个批处理是保存在U盘里的还是保存在硬盘上的?如果是保存在U盘里的话,根本用不着寻找U盘的盘符了,直接用相对路径就可以了。
回复

使用道具 举报

18#
 楼主| 发表于 2006-10-25 02:04:08 | 只看该作者
原帖由 namejm 于 2006-10-24 11:57 PM 发表
  看了以上的讨论,有个疑问:你这个批处理是保存在U盘里的还是保存在硬盘上的?如果是保存在U盘里的话,根本用不着寻找U盘的盘符了,直接用相对路径就可以了。


您可能没有从头看。这个autoexec.bat当然是保存在U盘里了,我是要从U盘启动哪!
由于用U盘启动后,在有的机器上是作为A盘,有的是C盘,因为盘符不固定,所以无法引用,我正是希望获得相对路径(U盘的相对盘符:即A或C)。您有什么好办法?
回复

使用道具 举报

19#
发表于 2006-10-25 07:41:53 | 只看该作者
兄弟啊,只要你是u盘启动到dos,那么启动后即是u盘的盘符,不管那个kvdos是在u盘的什么目录,你都可以用相对目录找到的

比如你完全可以在autoexec.bat最后面添加:

cd kvdos (你的kvdos所在目录或路径)
kvdos.exe
回复

使用道具 举报

20#
 楼主| 发表于 2006-10-25 11:39:41 | 只看该作者
原帖由 wjgyz740526 于 2006-10-25 07:41 AM 发表
兄弟啊,只要你是u盘启动到dos,那么启动后即是u盘的盘符,不管那个kvdos是在u盘的什么目录,你都可以用相对目录找到的

比如你完全可以在autoexec.bat最后面添加:

cd kvdos (你的kvdos所在目录或路径)
kv ...


问题是我确实需要盘符呢?比如:我还需要调用另一个批文件,这个批文件中又涉及到U盘内的某个目录怎么办?
回复

使用道具 举报

21#
发表于 2006-10-25 12:42:17 | 只看该作者
  只要是调用的是本分区或本盘符下的文件或程序,直接用相对路径就可以解决问题,完全不用获取盘符。
回复

使用道具 举报

22#
 楼主| 发表于 2006-10-25 13:06:41 | 只看该作者
原帖由 namejm 于 2006-10-25 12:42 PM 发表
  只要是调用的是本分区或本盘符下的文件或程序,直接用相对路径就可以解决问题,完全不用获取盘符。

问题是我不止是只调用的是本分区或本盘符下的文件或程序,我如果调用了其他分区的文件,然后在调用U盘的某目录下的文件,怎么办呢?

因此,我需要的是通用的获得U盘盘符的方法,您要是知道的话,请指教。

我不希望在相对路径上纠缠。
回复

使用道具 举报

23#
发表于 2006-10-25 13:22:05 | 只看该作者
  我怎么老觉得你这个问题的环境是这样的呢:批处理并不保存在U盘上,而是保存在硬盘里?要不然,你怎么会一再要求获取U盘的盘符?

  如果批处理确实保存在U盘里,那么,3F的代码是获取U盘盘符的通用方法。如有特殊需要,请自行扩充。
回复

使用道具 举报

24#
 楼主| 发表于 2006-10-25 16:19:39 | 只看该作者
原帖由 namejm 于 2006-10-25 01:22 PM 发表
  我怎么老觉得你这个问题的环境是这样的呢:批处理并不保存在U盘上,而是保存在硬盘里?要不然,你怎么会一再要求获取U盘的盘符?

  如果批处理确实保存在U盘里,那么,3F的代码是获取U盘盘符的通用方法。 ...


        对啊,我就是想了解获取U盘盘符的通用方法,“3F的代码”指的是什么呢?
回复

使用道具 举报

25#
发表于 2006-10-25 17:55:34 | 只看该作者
  3F的意思是本主题的第三个帖子。
回复

使用道具 举报

26#
 楼主| 发表于 2006-10-25 18:25:45 | 只看该作者
原帖由 namejm 于 2006-10-25 05:55 PM 发表
  3F的意思是本主题的第三个帖子。

我试过了,设定的这个盘符不总是正确。也就是说,第一次引用正确,以后就不正确了。比较奇怪。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-4 13:05

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表