无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7664|回复: 16
打印 上一主题 下一主题

[求助] 如何在DOS下取得 某个特定卷标的盘符?

[复制链接]
跳转到指定楼层
1#
发表于 2006-2-25 19:53:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可能表达得不清楚
  我如果将硬盘在 分区软件里 分好了 区,并给每个分区 设置了 卷标,比如说,

  C:  SYS
  D: FILE
  E: BACK

   我如何在 DOS 的 BAT 里 取得   卷标为 BACK 的是 E?
  谢谢啦

  搞了好长时间没有搞定
2#
发表于 2006-2-25 19:55:13 | 只看该作者

[求助] 如何在DOS下取得 某个特定卷标的盘符?

***** 版主模式 *****
该贴子是管理员从<a href=forums.cgi?forum=34>光盘启动区</a>转移过来的!
回复

使用道具 举报

3#
发表于 2006-2-25 21:51:09 | 只看该作者

[求助] 如何在DOS下取得 某个特定卷标的盘符?

思路如下:
用for命令循环执行vol命令,并用if比对结果。
回复

使用道具 举报

4#
 楼主| 发表于 2006-2-26 10:53:24 | 只看该作者

[求助] 如何在DOS下取得 某个特定卷标的盘符?

下面引用由fujianabc2006/02/25 09:51pm 发表的内容:
思路如下:
用for命令循环执行vol命令,并用if比对结果。

  谢谢啦,  有没有 源码,指点一下呀
  
回复

使用道具 举报

5#
发表于 2006-2-27 12:17:22 | 只看该作者

[求助] 如何在DOS下取得 某个特定卷标的盘符?

[这个贴子最后由xusen在 2006/02/27 12:28pm 第 5 次编辑]

需要一个FIND.EXE 查找工具,WINDOWS环境下的DOS FIND.EXE 是自带的,不需要另带
执行结果:环境变量BACK 就是您要找的卷标为BACK的盘符。
=====================
@echo off
if not %1&#35;==&#35; goto 下一步
set drv=C D E F G H I J K L N M O P Q R S T U V W X Y Z
call %0 %drv%
:下一步
shift
if %0&#35;==&#35; goto 结束
vol %0:|find "%0" /i >nul
if errorlevel 1 goto 结束
vol %0:|find "back" /i >nul
if errorlevel 1 goto 下一步
set back=%0:
:结束
set drv=
回复

使用道具 举报

6#
 楼主| 发表于 2006-2-27 14:44:44 | 只看该作者

[求助] 如何在DOS下取得 某个特定卷标的盘符?


  谢谢,我试试,这代码还得消化一阵
回复

使用道具 举报

7#
发表于 2009-4-23 01:19:32 | 只看该作者
顶一下  测试了代码不行

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::名称:finddrv.bat
::
::用法:finddrv.bat %1
::
::参数:%1 为指定的卷标
::
::功能:在MSDOS环境下查找指定卷标的盘符,并将盘符给变量
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

@Echo off

SET Drive=null
SET VolName=%1

for %%z in (g f e d c) do vol %%z:|find /i "%VolName%" >nul 2>nul && if not errorlevel 1 (SET Drive=%%z && goto fff)
echo 不存在卷标为%VolName%的分区!
pause && exit

:fff
echo 搜索卷标为%VolName%的分区盘符为:%Drive%
pause && exit
回复

使用道具 举报

8#
发表于 2009-4-23 01:20:11 | 只看该作者
上面那个代码测试了也不行, 真是郁闷阿
回复

使用道具 举报

9#
发表于 2009-4-23 08:16:25 | 只看该作者
存dos下:用 drvtypes 结合 lable 命令 再用strings nset 等软件。用 goto 实现循环应该可以做到。
回复

使用道具 举报

10#
发表于 2009-4-23 09:03:56 | 只看该作者
来个纯dos下复杂的bat: 运行 findvol back 就会找出 卷标为back 的分区,前提是分区必须被dos识别,比如fat32,如果是ntfs分区,就需要事先挂接驱动。
软件包: findvol.rar (28.46 KB, 下载次数: 93)
最终得到 变量 drvx 就是所需分区:
涉及到的软件:
drvtypes  找出现存磁盘分区
dready  判断磁盘分区状态
strings  字符串处理软件,这里用来判断文件行数和读取文件行内容
nset 内存变量设置软件,用来把vol命令中的vol内容传递给变量
err2env 把errorlevel 变量赋值给一个另一个实际变量
vol 内部命令,负责显示分区卷标

代码如下:
---------------------
@echo off
set x=0
if %1*==* goto error1
echo Finding vol:%1...
drvtypes /d > drvs.txt
strings l=linesize drvs.txt
strings l=add %l%,1
set n=0

:loop
strings n=add %n%,1
nset /l%n% drv=$1 < drvs.txt
dready %drv%
err2env /q,ok
if not %ok%*==0* goto loop
vol %drv% | nset /l2 volx=$6
if %volx%*==%1* goto find1
if %n%*==%l%* goto end
goto loop

:find1
echo %drv%
set drvx=%drv%
set x=1
goto end

:error1
echo Error!
echo findvol [vol]

:end
if not %x%==1 echo No found!
set drv=
set l=
set volx=
set ok=
set n=
set x=
if exist drvs.txt del drvs.txt
echo End!
----------------------------------------

[ 本帖最后由 dos时代菜鸟 于 2009-4-23 09:13 编辑 ]
回复

使用道具 举报

11#
发表于 2009-4-23 18:06:12 | 只看该作者
非常 感谢楼上的帮助,

关键我觉得 程序应该 越精简越好, CPU 能少执行一条指令 就多一份效率,
回复

使用道具 举报

12#
发表于 2009-4-23 18:52:08 | 只看该作者
原帖由 dos时代菜鸟 于 2009-4-23 09:03 发表
来个纯dos下复杂的bat: 运行 findvol back 就会找出 卷标为back 的分区,前提是分区必须被dos识别,比如fat32,如果是ntfs分区,就需要事先挂接驱动。
软件包:59762
最终得到 变量 drvx 就是所需分区:
涉及 ...

DOS我只会COPY指令,晕倒…,没想到要这么多动作,
那取得 某个特定卷标的盘符?该如何可以运用到我GHOST- autoexec.bat里,请指教一下
@echo off
IF "%CONFIG%"=="a" GOTO END
IF "%CONFIG%"=="b" GOTO M1

:M1
xcopy *.* C:\
1JF9e_d.COM
回复

使用道具 举报

13#
发表于 2009-4-24 07:14:56 | 只看该作者
纯dos下要达到一个类似的功能,就要这样。这还是简单的呢!
思想类似 dos下的 c语言 basic语言 数据库编程。

其实并不难,只要有耐心慢慢来就可以了。
回复

使用道具 举报

14#
发表于 2009-4-24 08:06:21 | 只看该作者
可借助第三方工具dspt来确定卷标与盘符的关系,可能步骤要少一些。
回复

使用道具 举报

15#
发表于 2009-4-24 09:45:42 | 只看该作者
以下代码是什么原理  我测试也是不行

@ECHO OFF
@FOR %%D IN (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 (
@FOR /F "USEBACKQ TOKENS=4 DELIMS= " %%V IN (`VOL %%D:^|FIND /I "中的卷是"`) DO IF "%%V"=="这里添写卷标名" FORMAT /Q /FS:NTFS %%D:)
回复

使用道具 举报

16#
发表于 2009-4-24 10:29:44 | 只看该作者
原帖由 app 于 2009-4-24 09:45 发表
以下代码是什么原理  我测试也是不行

@ECHO OFF
@FOR %%D IN (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 (
@FOR /F "USEBACKQ TOKENS=4 DELIMS= " %%V IN (`VOL %%D:^|FIND /I "中的卷是"`) D ...


提醒: “CMD”非“DOS”。
不少人混为一谈。
回复

使用道具 举报

17#
发表于 2009-4-24 11:06:48 | 只看该作者
难怪了, 那就是说 DOS 不能这样处理了
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-2-28 04:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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