无忧启动论坛

标题: 我写了个小批处理,用>nul无法屏蔽错误提示 [打印本页]

作者: ww111222    时间: 2007-8-19 15:46
标题: 我写了个小批处理,用>nul无法屏蔽错误提示
type  test.bat

  Quote:
@echo off

rem 检测备份分区    设置Drive为备份分区盘符
SET Drive=null
for %%z in (c d e f g h i j k l m n o p q r s t u v w ) do call 1.bat %%z >nul

if %Drive%==null goto exit
goto boot
:exit
echo 不存在备份分区,安装中止!
pause && exit

:boot
echo 备份分区盘符为:%Drive%
pause

type 1.bat

  Quote:
@echo off
vol %1: |find "1KEYRESTORE" >nul
if errorlevel 1 goto exit
SET Drive=%1:
:exit

这两代代码 能找出 具体卷标的 那个 盘的盘符,

但在 运行过程 中 会因为 没有的盘 而显示出来一个错误提示:

Invalid drive specification

我如何 才能屏蔽这个提示?




作者: lianjiang    时间: 2007-8-19 16:12
>nul只能屏蔽正确的信息。错误的还需2>nul.
即 >nul 2>nul
作者: ww111222    时间: 2007-8-19 18:07
原帖由 lianjiang 于 2007-8-19 04:12 PM 发表
>nul只能屏蔽正确的信息。错误的还需2>nul.
即 >nul 2>nul




  测试还是不正常

反而多了 个错误:

未命名.JPG (22.15 KB, 下载次数: 63)

未命名.JPG

作者: lianjiang    时间: 2007-8-19 18:17
看来3楼的只能屏蔽一般错误。
作者: lianjiang    时间: 2007-8-19 18:24
do call 1.bat %%z >nul
改成下面的试试看:
if exist %%z:\nul  do call 1.bat %%z >nul

[ 本帖最后由 lianjiang 于 2007-8-19 07:04 PM 编辑 ]
作者: 无翼鸟飞翔    时间: 2007-8-19 20:45
呃...有点郁闷....这么试都失败.....vol的输出不能>nul?????
用分区下特征文件ms没有任何问题....
作者: 无翼鸟飞翔    时间: 2007-8-19 21:58
标题: 回复 #5 lianjiang 的帖子
如果用if...exist判断的话.可以直接放一个特征文件进去.就没有必要再转个弯用vol加find判断了...
作者: lianjiang    时间: 2007-8-19 22:03
同意,个人以为特征文件的方法足矣。
作者: 无翼鸟飞翔    时间: 2007-8-19 22:09
标题: 回复 #8 lianjiang 的帖子
我一直这么用的......关注中..
作者: ww111222    时间: 2007-8-20 01:01
原帖由 无翼鸟飞翔 于 2007-8-19 10:09 PM 发表
我一直这么用的......关注中..



  能否给个 例子, 我是 实在 没脑子了
作者: lzyyj    时间: 2007-8-20 01:18
原帖由 ww111222 于 2007-8-19 03:46 PM 发表
type  test.bat

  Quote:@echo off

rem 检测备份分区    设置Drive为备份分区盘符
SET Drive=null
for %%z in (c d e f g h i j k l m n o p q r s t u v w ) do call 1.bat %%z >nul

if %Drive%==n ...


你把 for 循环改一下就行了
for %%z in (c d e f g h i j k l m n o p q r s t u v w ) do if exist %%z:\nul call 1.BAT %%z >nul
避免测试那些无效的驱动器!
作者: lianjiang    时间: 2007-8-20 07:23
原帖由 ww111222 于 2007-8-20 01:01 AM 发表



  能否给个 例子, 我是 实在 没脑子了

就是在你的备份分区的指定路径,放置一个特征文件,然后查找这个文件,找到了,该分区就是你要找的分区。
作者: ww111222    时间: 2007-8-20 09:20
原帖由 lzyyj 于 2007-8-20 01:18 AM 发表


你把 for 循环改一下就行了
for %%z in (c d e f g h i j k l m n o p q r s t u v w ) do if exist %%z:\nul call 1.BAT %%z >nul
避免测试那些无效的驱动器!





   谢谢啦, 我 对 for 的 运用还是停在 照猫画猫 阶段,
作者: 凌晨破晓前    时间: 2007-8-20 09:48
也来学习一下        
作者: 无翼鸟飞翔    时间: 2007-8-20 13:58
。。ls的。灌水去水区去。。。

用判断保留设备存在为条件再查找vol?ms没有这必要。。。。直接放置一个onkey。bin类似的特征文件到分区。然后判断不更容易
作者: Climbing    时间: 2007-8-20 14:22
可以用horst的Dready先检查一下对应的盘符是否能够访问,如果不能,跳过就是了。
作者: 无翼鸟飞翔    时间: 2007-8-20 14:35
不安装第三方软件的话。有没办法跳过。。。。。。?
作者: 无翼鸟飞翔    时间: 2007-8-20 16:44
http://www.cn-dos.net/forum/viewthread.php?tid=12892#pid95281

看里面的内容。貌似N久前就有diskchk这种东西存在。。应该也是判断盘符存在的P处理。。不过奇怪的是。用2>nul。仍然有错误溢出。。。。郁闷了。。。。
作者: waiting    时间: 2007-8-21 10:39
AUTOEXEC.BAT
....
:f11set 传输一键恢复系统文件→隐藏分区=========================
%RAMDRIVE%
CD\
set drives=
for %%i in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W:) DO Call IsReady %%i
for %%i in (%drives%) DO call ChkLabel.bat %%i
if not %found%"==" goto F11_INST
WBAT BOX "找不到一键ghost恢复系统分区(SYS_RESTORE)分区的盘符!",查看分区情况,返回主菜单 # +1
IF ERRORLEVEL 2 goto main menu
IF ERRORLEVEL 1 goto lookPART

.....



ChkLabel.bat :
@echo off
set chkdrv=%1
if %chkdrv%"==" goto quit
vol %chkdrv% | lmod /L1 set label=[$!] >%RAMDRIVE%\IsExist.bat
call %RAMDRIVE%\IsExist.bat
if "SYS_RESTORE"=="%label%" set found=%chkdrv%
:quit
set chkdrv=








或者用类似方式丢个特征文件:
cdReady.bat
@echo off
if %1'==' goto quit
dready %1
if errorlevel 1 goto quit
if errorlevel 0 goto cdtag
goto quit

:cdtag
if exist "%1\BOOT\CHKCD.TAG" set CDDRIVE=%1

:quit

[ 本帖最后由 waiting 于 2007-8-26 11:43 PM 编辑 ]
作者: 无翼鸟飞翔    时间: 2007-8-21 12:27
标题: 回复 #19 waiting 的帖子
ls的能不能把isready的内容放出来
作者: laozhao    时间: 2007-8-23 22:32
纯DOS的有什么2>null的功能?

管道操作只对stdin,stdout起作用,对stderr是无效的。即标准输入输出可以管道的,标准错误是无法过滤的。除非你用str程序改造msdos内核。
作者: wang6071    时间: 2007-8-24 23:28
没用的,ntfs下取不到磁盘卷标,这个方法autodel以前尝试过,最后还是用特征文件法.




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