标题: [已解决]半年多都没解决的纯DOS批处理问题
[打印本页]
作者: xiaofking
时间: 2008-1-11 14:51
标题: [已解决]半年多都没解决的纯DOS批处理问题
已经求助过很多批处理的高手,但纯DOS下真的太难实现,findstr用不了,大家帮帮忙吧,是否借助第三方工具能实现,简单介绍如下:
纯DOS下,运行某DOS程序Gdisk,屏幕输出文本内容如下
AAA BBB CCC //第一行
xxx yyy zzz //第二行
以上字母皆为替代,只是大概输出如此(输出的这些字符串全部显示在纯DOS画面中,没有生成文本文件)
现在要求判断Gdisk的以上输出,如果第二行中有出现字符串“A01”或"A02",就执行语句go1,如果没有就重启
大概就是这样了,大家提些思路好吗,是否要用到类似input,askenv,aset,xset,strings,wbat,be这些第三方工具?能否给出批处理的大概写法
[
Last edited by xiaofking on 2008-1-14 at 01:20 PM ]
作者: 不得不爱
时间: 2008-1-11 14:53
用NSET就可以解决这个问题!
作者: xiaofking
时间: 2008-1-11 15:02
版主。。。能不能根据我的流程写几句看看
作者: xiaofking
时间: 2008-1-11 15:05
或者给我一个nset的使用方法行不行,我在网上只能找到这么一句
Nset.com 从输出中取得变量以设置,FINDCD -a|NSET CDROM=$1
作者: qzwqzw
时间: 2008-1-11 19:30
只用dos自带的find就可以了
如果只是忽略大小写查找A01,那么
gdisk| find "A01" /i>nul
if errorlevel 1 goto end
:go1
::其它语句
:end
如果指定在第二行忽略大小写查找A01,那么
gdisk | find "" /v/n | find "[2]" | find "A01" /i>nul
if errorlevel 1 goto end
:go1
::其它语句
:end
作者: xiaofking
时间: 2008-1-11 21:38
find 在纯DOS无法使用....
作者: xiaofking
时间: 2008-1-11 21:39
纯DOS也无法指定在第几行查找的
作者: xiaofking
时间: 2008-1-11 21:51
find可以用...但你上面的方法是不行的
作者: zh159
时间: 2008-1-11 21:59
纯DOS下find是外部命令,所以你得找一个DOS下的find
作者: xiaofking
时间: 2008-1-12 00:35
试过了,无论是运行nset还是find,在纯DOS下都会出现
“未准备写驱动器A”A:放弃,R:重试,F:失败?
证明nset和find都是需要写入缓存的命令。。。没作用啊。。。
作者: fastslz
时间: 2008-1-12 00:40
Quote: |
Originally posted by xiaofking at 2008-1-12 00:35:
试过了,无论是运行nset还是find,在纯DOS下都会出现
“未准备写驱动器A”A:放弃,R:重试,F:失败?
证明nset和find都是需要写入缓存的命令。。。没作用啊。。。 |
|
这里有找答案
http://www.cn-dos.net/forum/view ... ge=1&highlight=
作者: xiaofking
时间: 2008-1-12 00:55
仔细看过了,问题是我没办法生成一个txt文件,而且 | 这个符号在纯DOS也无法使用,Gdisk -a 后直接输出在画面上的
作者: xiaofking
时间: 2008-1-12 01:44
找了N多个工具,其实问题就是在于如何不用输出txt文件也可以实现这个功能,如果要输出txt文件的话就简单了
作者: fastslz
时间: 2008-1-12 01:45
“未准备写驱动器A”A:放弃,R:重试,F:失败?
11楼看到了吗
Quote: |
Originally posted by fastslz at 2008-1-4 12:10:
我猜测分析下是什么原因吧
F应该是你的光盘盘符,你启动的DOS下没有find.com外部命令,而Path变量里有%CDROM%或F:\.....,这个时候DOS就尝试读取光盘下目 ... |
|
我猜测分析下是什么原因吧
猜测1: 你的电脑应该有软驱的,你启动的DOS下没有find.com外部命令,而Path变量里有A:\,这个时候DOS就尝试读取A:\目录下寻找find.com,所以出现一般性错误读驱动器A:\。
猜测2: 你的电脑应该有软驱的,你启动的DOS下没有find.com外部命令,你就拷贝了xp下的find.exe在纯DOS用,xp的find是32位子程序在纯dos下用需要32位支持文件CWSDPMI,而Path变量里有A:\,这个时候DOS就尝试读取A:\目录下寻找CWSDPMI.exe,所以出现一般性错误读驱动器A:\。
无法生成一个txt文件,不是因为 | 符号在纯DOS也无法使用,在猜测2里已经说明了,是因为find 命令没执行成功,没执行成功当然不会生成txt文件
作者: terse
时间: 2008-1-12 01:57
lmod 应该可以指定行的 你gdisk先输出不就可以了 是不是一定要输出在画面上呢
作者: xiaofking
时间: 2008-1-12 01:58
我直接使用find查找txt文本是可以的,但是用gdisk | find就不行了
find "A01" 1.txt成功
gdisk | find "A01"失败
能不能在进入纯DOS命令之前,先用config.sys让gdisk.exe先输出一个txt文件在A盘呢?
作者: xiaofking
时间: 2008-1-12 02:07
gdisk一定要输出在画面上或A盘中的,我又试了一下 | 符号应该是不能用的吧?
连这样的语句都会出错的echo aaa | find “aaa”,绝对不关find或其他问题,我用了N个第三方查找工具了,全都一样,只要有 | 就不行,如果不用 | 又必须输出txt文件来查找。。。
作者: terse
时间: 2008-1-12 02:22
应该可以用 |
gdisk | lmod /L2 [] | find /i "A01"
if errorlevel 1 goto end
:go1
..................
:end
不知道后面的find可否省略!因为在 lmod 里的一个参数可以在 []可以直接写上要显示的A01 如: lmod /L2 [] [A01] (因没用过 所以不确定) 然后判断返回值 不知行得同不?
[
Last edited by terse on 2008-1-12 at 02:43 AM ]
作者: lianjiang2004
时间: 2008-1-12 10:22
出错原因是当前盘符不可写。解决此问题就行了。
作者: terse
时间: 2008-1-12 15:02
AUTOEXEC.BAT和CONFIG.SYS的内容看一下 估计在是哪个环节出问题
下个 lmod 运行下面的试一下 也可以变更一下 把A01换成别的
@echo off
gdisk | lmod /L2 [$1] [A01]
if errorlevel 1 goto end
:go1
echo ok
goto exit
:end
echo no
[
Last edited by terse on 2008-1-12 at 03:47 PM ]
作者: lianjiang2004
时间: 2008-1-12 16:53
Quote: |
Originally posted by terse at 2008-1-12 15:02:
AUTOEXEC.BAT和CONFIG.SYS的内容看一下 估计在是哪个环节出问题
下个 lmod 运行下面的试一下 也可以变更一下 把A01换成别的
@echo off
gdisk | lmod /L2 [$1] [A01] ... |
|
当前盘不可写的话,能用吗?
作者: terse
时间: 2008-1-12 19:57
Quote: |
Originally posted by lianjiang2004 at 2008-1-12 16:53:
当前盘不可写的话,能用吗? |
|
叫LZ把AUTOEXEC.BAT和CONFIG.SYS的内容发来看一下,当前盘不可写是一个方面!但也有可能别的原因!LZ是用什么启动到DOS的呢?
作者: dooomer
时间: 2008-1-12 20:17
看来楼主主要的困难是没有办法生成txt临时文件。
不是有叫做内存盘的东东吗?用内存虚拟一个可读写磁盘出来,然后把输出重定向到txt文件再做处理。
作者: lianjiang2004
时间: 2008-1-12 20:26
Quote: |
Originally posted by terse at 2008-1-12 19:57:
叫LZ把AUTOEXEC.BAT和CONFIG.SYS的内容发来看一下,当前盘不可写是一个方面!但也有可能别的原因!LZ是用什么启动到DOS的呢? |
|
在我的论坛,楼主已经说了,就是因为不可写,所以才要不生成中间文件的,否则,用中间文件岂不是要简单的多?
只是楼主自己问题交待不清,搞得各位不知所措。呵呵。
作者: lianjiang2004
时间: 2008-1-12 20:29
不可写,这是造成无法实现各位的意图的关键原因。不可写的话,什么方案都是白搭。呵呵。
作者: terse
时间: 2008-1-13 00:52
我以为即使当前盘不可写 我在20楼的应该可行吧 只是没有测试环境 所以不知道可行否!
作者: lianjiang2004
时间: 2008-1-13 07:52
Quote: |
Originally posted by terse at 2008-1-13 00:52:
我以为即使当前盘不可写 我在20楼的应该可行吧 只是没有测试环境 所以不知道可行否! |
|
个人以为,不管哪种方案,都要求当前盘可写。
而这也是问题的关键。
作者: 不得不爱
时间: 2008-1-13 19:49
楼主用GDISK干什么?
作者: qzwqzw
时间: 2008-1-13 23:14
似乎只有awk了
作者: everest79
时间: 2008-1-14 01:06
gdisk是ghost 2k里边带的一个分区工具
gdisk无参数运行是默认显示当前机算机第一块磁盘的分区情况
作者: terse
时间: 2008-1-14 11:16
gdisk无参数运行是并不只是显示当前机算机第一块磁盘的分区情况吧 而是全部硬盘吧
作者: xiaofking
时间: 2008-1-14 13:20
Quote: |
Originally posted by dooomer at 2008-1-12 08:17 PM:
看来楼主主要的困难是没有办法生成txt临时文件。
不是有叫做内存盘的东东吗?用内存虚拟一个可读写磁盘出来,然后把输出重定向到txt文件再做处理。 |
|
最后采用此方案解决,谢谢各位