中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-18 15:31
47,814 主题排行 / 349,908 发帖 / 今日 1 篇 / 48,259 会员排行
DOS批处理 & 脚本技术(批处理室) » 请问什么软件可以通过分区卷标名称查找分区?
可打印版本  5,737 / 33
第16楼 walu 发表于 2004-04-09 00:00
高级用户 发帖 201 积分 916
我查了一下,应该是第二个文件中的 if "%lable%"=="BACKUP" set BackDrive=%1
出错,我是这样试的(换了一点): if "%lable%"=="BACKUP" goto yes 然后它不会跳到YES段。不知对否?
第17楼 Climbing 发表于 2004-04-10 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
你要确认你的分区的卷标确实是BACKUP,你可以单独测试这几个批处理文件的每一行命令是否工作正常(将批处理前面的@echo off)去掉,然后运行时查看运行的命令行及结果就可以诊断出故障原因了。

我只是根据理论上的可行性写了这么几个批处理文件,我并没有亲自测试,因为我用不到。
第18楼 walu 发表于 2004-04-10 00:00
高级用户 发帖 201 积分 916
按照你的分析方法分析了一下,果然出错的是
if "%lable%"=="BACKUP" set BackDrive=%1
这一行,无论ChkLabel哪个分区,也不管分区卷标是什么,这一行都是返回同样的结果。

如C盘的卷标是SYS,ChkLabel C: 后,变成
if "%lable%"=="BACKUP" set BackDrive=c:
如果D盘卷标是SOFT,ChkLabel D: 后,变成
if "%lable%"=="BACKUP" set BackDrive=d:

所以这个问题又回到了我最初提出的“通过你的程序得知C盘的label是SYS,但这都我们肉眼所看到的呀,批处理又不会识别只要label是SYS就向它复制文件”

这个文件(即以下几行)

vol %1 | grep drive | lmod /L1 set label= > temp.bat
call temp.bat
del temp.bat
set BackDrive= ←这一行倒是会正确显示卷标
if "%lable%"=="BACKUP" set BackDrive=%1 ←实际这一行是根本是不起作用的


第19楼 Climbing 发表于 2004-04-11 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
兄弟呀,我粗心犯些错误也是难免的,难道你就不能认真一些?你有没有发觉上面的最后一句:
if "%lable%"=="BACKUP" set BackDrive=%1

中有一个明显的错误,那就是将%label%错写成了%lable%,我当时因为着急打错了,而你调试了这么长时间竟然没有发现,真不知道你是怎么调试的。

我重新修改了前面帖子中写的ChkLabel.bat,你再用新的试一下。
第20楼 walu 发表于 2004-04-11 00:00
高级用户 发帖 201 积分 916
错误依旧,if "%lable%"=="BACKUP" set BackDrive=%1 这一行,无论ChkLabel哪个分区,也不管分区卷标是什么,这一行都是返回同样的结果。
第21楼 Climbing 发表于 2004-04-12 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
你的错误仍然没有改正过来,我晕。

看我前面的帖子好吗?
第22楼 cdl 发表于 2004-04-12 00:00
中级用户 发帖 107 积分 340
diskedit是个好工具
第23楼 Climbing 发表于 2004-04-12 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
没看清题意请不要乱灌。
第24楼 walu 发表于 2004-04-12 00:00
高级用户 发帖 201 积分 916
if "%lable%"=="BACKUP" set BackDrive=%1
这是我发帖时粘原来的,我测试时是用
if "%label%"=="BACKUP" set BackDrive=%1
测试结果真的和原来一样的错误
第25楼 Climbing 发表于 2004-04-12 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
你翻回去看我前面的帖子吗?我修改过了,使用另一种形式就行操作,你再用新的ChkLabel.bat试一下。
第26楼 Climbing 发表于 2004-04-12 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
打开附件

非逼着我亲自试一下(不过亲自试的过程中确实发现了批处理中的一些小bug,但方案绝对是可行的),上面的附件就是最后的结果。

将附件下载下去,然后解开,共有三个批处理文件:
IsReady.bat
ChkLabel.bat
FindBack.bat

其实,FindBack.bat应该改成FindLbl.bat。

用法:假设你要找一个分区卷标为backup的盘符,则输入以下命令:
FindBack backup

另外,你可以自己修改FindBack.bat中_found段的内容,在找到该盘符后做某个操作。
经过完善,在输入卷标时不用关心大写小写,批处理中会自动将卷标全部转换成大写进行比较。

上述程序在Windows xp的DOS方式下测试通过,其它环境未加测试(因为也没有别的环境)。
第27楼 Climbing 发表于 2004-04-12 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
注意,上述批处理文件只能运行在英文系统中才能正确找到卷标,如果vol命令是中文提示,还要再对批处理文件进行适当修改。我刚才发觉在中文的Windows 2000中运行Vol命令运行结果为:
C:\>vol c:
驱动器 C 中的卷是 HDA1_W2KP
卷的序列号是 0000-8DFE

而在我的Windows XP英文版运行相同的命令运行结果却是:
d:\TEMP>vol c:
Volume in drive C is HDA3_XPEN
Volume Serial Number is 3CE3-C65F

运行结果有明显的区别,一个为中文提示,一个为英文提示,而我上面提供的批处理文件只能正确运行于英文提示下,如果是中文提示,需要修改ChkLable.bat中的这一行:
vol %chkdrv% | grep drive | lmod /L1 | lmod /L1 set label= > temp.bat

将上面一行中的grep drive修改为grep 驱动器(也是理论上的,因为没有测试),即:
vol %chkdrv% | grep 驱动器 | lmod /L1 | lmod /L1 set label= > temp.bat
第28楼 Climbing 发表于 2004-04-12 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
在win2000中文版下又试了一下,由于lmod不支持中文代码页,所以在运行lmod后提示会变成英文,所以不存在上面帖子所述的兼容性问题,但FindBack.bat还是要进行适当的修改,修改成下面这样(其中加黑的那一行为新增内容,其它行没有变化):
@echo off
SET ToFind=%1

:: 下面一行定义你要查找的分区卷标
if "%ToFind%"=="" set ToFind=BACKUP

lmod > nul

echo %ToFind% | lmod /L1 set ToFind= > temp.bat
call temp.bat
del temp.bat

set drives=
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 Call IsReady %%D
set BackDrive=
for %%D in (%drives%) DO call ChkLabel.bat %%D
if not "%BackDrive%"=="" goto _found
goto _notfound

:_found
echo 找到%ToFind%分区在盘符%BackDrive%,准备对该盘进行操作
echo Found %ToFind% Partition at Drive %BackDrive%, prepare to operate on it.
::下面定义你自己的操作
::copy FileToBackup %BackDrive%\
::if exist %BackDrive%\FiletoBackup echo Backup Successfully!
goto _quit

:_notfound
echo Error: 我不能找到你的%ToFind%分区!
echo Error: I cannot find the "%ToFind%" Partition.
pause

:_quit
set drives=
set BackDrive=
set label=
set ToFind=
第29楼 walu 发表于 2004-04-12 00:00
高级用户 发帖 201 积分 916
谢谢 Climbing 的热心与耐心!
原来你的批处理是在WINDOWS下运行的,弄得我一直在虚拟机的纯DOS下测试,怪不得得到的结果与你不同。呵呵,虽然现在也用不着,但 Climbing 兄的这种热心耐心实在令人钦佩!
第30楼 Climbing 发表于 2004-04-13 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
我的批处理不止是可以运行于Windows下,在纯dos环境中也没有问题的,上午刚试过了。
上一页  1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023