![]() |
中国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 %%Dset 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 |