无忧启动论坛

标题: 请教:如何确定U盘的盘符? [打印本页]

作者: zjz    时间: 2006-10-23 17:13
标题: 请教:如何确定U盘的盘符?
请教各位高人:我制作好了U盘dos启动盘,希望在批处理文件中运行U盘中的程序,但因用U盘启动,在不同机器上被赋予的盘符不同,有时是A,有时是C,这就使我在批文件中无法定位U盘中的程序。哪位知道如何让其自动识别盘符,使我能够在批文件中使用一个变量就可以代替U盘的盘符(无论此U盘被机器识别为A,C或其他)?先谢谢各位了!!!
作者: 小军军    时间: 2006-10-23 18:12
不管它是A还是C,U盘上总有你特定的文件可以识别吧
作者: namejm    时间: 2006-10-23 19:29

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

作者: zjz    时间: 2006-10-23 21:14
谢谢楼上的帮助!我试后再告诉您结果。
不过,您可否解释一下以利于学习,谢谢!
%cd% 代表什么呢?
cd\ 是否代表回到根目录呢?
我以后在批文件中引用U盘盘符时,能否用%current_driver%代替U盘所在分区?
作者: zjz    时间: 2006-10-23 21:24
原帖由 小军军 于 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
作者: namejm    时间: 2006-10-23 21:28
  其实这已经属于最基本的DOS命令了。

  cd\  的意思是跳转到当前路径的根目录下,%cd% 表示当前路径。要获取U盘的盘符的话,必须把这个代码放在U盘上,也只能在含有这段代码之后的代码中使用 %current_driver% 来表示U盘的盘符。值得注意的是,这个 %current_driver% 的结果是 字母+冒号+斜杠 的格式。
作者: wjgyz740526    时间: 2006-10-23 21:38
@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
作者: zjz    时间: 2006-10-23 22:06
谢谢您的耐心解答!请您看看我的理解对不对:
---
假定:我的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

请指教!
作者: zjz    时间: 2006-10-23 22:17
谢谢 wjgyz740526 朋友,我下来试试。
另外:
cd /d %%i \你的工作目录
是否应为:
cd /d %%i :\你的工作目录  ?
作者: zjz    时间: 2006-10-24 07:47
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变量吗?
作者: wjgyz740526    时间: 2006-10-24 07:55
你把你U盘的目录结构及文件名以及你的目的发上来,我来试试看
作者: secowu    时间: 2006-10-24 08:16
原帖由 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)
如果 ...


正确,因为你不确定路径是否包含有空格或是特殊字符的时候,你需要用引号来确保万无一失啊
作者: magictek    时间: 2006-10-24 10:22
使用if在有空光驱的时候会报错
作者: zjz    时间: 2006-10-24 19:18
原帖由 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
作者: wjgyz740526    时间: 2006-10-24 20:56
如果是u盘启动到dos,上面的命令不需要了,你直接在autoexec.bat中添加kvdos就可以了。
作者: zjz    时间: 2006-10-24 21:52
原帖由 wjgyz740526 于 2006-10-24 08:56 PM 发表
如果是u盘启动到dos,上面的命令不需要了,你直接在autoexec.bat中添加kvdos就可以了。


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

另外,我如果要是还有其他目录需要进入的话,如果不确定U盘的盘符就不方便了。
作者: namejm    时间: 2006-10-24 23:57
  看了以上的讨论,有个疑问:你这个批处理是保存在U盘里的还是保存在硬盘上的?如果是保存在U盘里的话,根本用不着寻找U盘的盘符了,直接用相对路径就可以了。
作者: zjz    时间: 2006-10-25 02:04
原帖由 namejm 于 2006-10-24 11:57 PM 发表
  看了以上的讨论,有个疑问:你这个批处理是保存在U盘里的还是保存在硬盘上的?如果是保存在U盘里的话,根本用不着寻找U盘的盘符了,直接用相对路径就可以了。


您可能没有从头看。这个autoexec.bat当然是保存在U盘里了,我是要从U盘启动哪!
由于用U盘启动后,在有的机器上是作为A盘,有的是C盘,因为盘符不固定,所以无法引用,我正是希望获得相对路径(U盘的相对盘符:即A或C)。您有什么好办法?
作者: wjgyz740526    时间: 2006-10-25 07:41
兄弟啊,只要你是u盘启动到dos,那么启动后即是u盘的盘符,不管那个kvdos是在u盘的什么目录,你都可以用相对目录找到的

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

cd kvdos (你的kvdos所在目录或路径)
kvdos.exe
作者: zjz    时间: 2006-10-25 11:39
原帖由 wjgyz740526 于 2006-10-25 07:41 AM 发表
兄弟啊,只要你是u盘启动到dos,那么启动后即是u盘的盘符,不管那个kvdos是在u盘的什么目录,你都可以用相对目录找到的

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

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


问题是我确实需要盘符呢?比如:我还需要调用另一个批文件,这个批文件中又涉及到U盘内的某个目录怎么办?
作者: namejm    时间: 2006-10-25 12:42
  只要是调用的是本分区或本盘符下的文件或程序,直接用相对路径就可以解决问题,完全不用获取盘符。
作者: zjz    时间: 2006-10-25 13:06
原帖由 namejm 于 2006-10-25 12:42 PM 发表
  只要是调用的是本分区或本盘符下的文件或程序,直接用相对路径就可以解决问题,完全不用获取盘符。

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

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

我不希望在相对路径上纠缠。
作者: namejm    时间: 2006-10-25 13:22
  我怎么老觉得你这个问题的环境是这样的呢:批处理并不保存在U盘上,而是保存在硬盘里?要不然,你怎么会一再要求获取U盘的盘符?

  如果批处理确实保存在U盘里,那么,3F的代码是获取U盘盘符的通用方法。如有特殊需要,请自行扩充。
作者: zjz    时间: 2006-10-25 16:19
原帖由 namejm 于 2006-10-25 01:22 PM 发表
  我怎么老觉得你这个问题的环境是这样的呢:批处理并不保存在U盘上,而是保存在硬盘里?要不然,你怎么会一再要求获取U盘的盘符?

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


        对啊,我就是想了解获取U盘盘符的通用方法,“3F的代码”指的是什么呢?
作者: namejm    时间: 2006-10-25 17:55
  3F的意思是本主题的第三个帖子。
作者: zjz    时间: 2006-10-25 18:25
原帖由 namejm 于 2006-10-25 05:55 PM 发表
  3F的意思是本主题的第三个帖子。

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




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3