|
dosfuner
新手上路
积分 13
发帖 7
注册 2007-4-15
状态 离线
|
『楼 主』:
[原创]NTFS4DOS.EXE 在批处理程序中运行的解决方案.
常见 NTFS4DOS.EXE 无法在 DOS 批处理程序中执行的问题!
现有一解决方案, 以 a:\autoexec.bat 为例示范如下.
在批处理程序中加入如下语句:
rem ---- 此处为文件头 -------------------------
if "%1"=="auto" goto _batch
......
ntfs4dos.exe a:\command.com /c a:\autoexec.bat auto
:_batch
......
:_end
a:
rem ----此处为文件尾 --------------------------
必要说明 -- 一旦批处理程序执行完毕, 将出现两种情况:
1. NTFS4DOS.EXE 自动从内存中退出, DOS 将不再支持 NTFS;
2. 在某些情况下 DOS 将找不到驱动器字母, 所以务必在程序结尾处 :_end 后加入 a: 或可被 DOS 识别的磁盘盘符.
简单地说, 此法为递归调用. 试想一下, 若无参数 "auto" 将会出现怎样的结果? 有人想试试吗?! ;)
附 NTFS4DOS.EXE 用法及参数如下:
NTFS for DOS Version 1.9
Copyright (C) 2006, Avira GmbH (http://www.avira.com)
All Rights Reserved.
Usage: NTFS4DOS [options] [DOS-APPLICATION [arg1 [arg2 [..]]]]
options:
/? | /h - this help
/rnn - create ramdrive nn MB
/lC - allocate first character 'C' for a volume
Example: NTFS4DOS /r5 /lE COMMAND.COM /C MYBATCH.BAT
Above creates a 5 MB ramdrive, makes first drive as E and starts the batch file MYBATCH.BAT
If no DOS-APPLICATION is specified, NTFS4DOS will try to start the
default DOS shell which is defined in the COMSPEC variable.
另有一个向大家求教的问题 -- 在 DOS 交互环境下, 手动执行 NTFS4DOS.EXE ver1.9 之后, 如何使其从内存中退出?
#########################################################################
Quote: | Originally posted by dosfuner at 2009-1-25 11:33 AM:
『第 5 楼』:
改动一下, 即可使其实现只执行一次批处理:
rem ---- 此处为文件头 -------------------------
if "%1"=="auto" goto _batch
......
ntfs4dos.exe a:\command.com /k a:\autoexec.bat auto
goto _end
:_batch
......
:_end
a:
rem ----此处为文件尾 --------------------------
当然, 此法只适用于对 autoexec.bat 或对批处理程序自身的递归调用. 若在 ntfs4dos.exe 命令行中调用其他批处理程序, 则不必如此繁琐. |
|
#########################################################################
2010-2-23 修改版--
近来偶然发现此批处理程序段有一 BUG,即当硬盘中全无 NTFS 格式分区时,ntfs4dos.exe 将自动从内存中退出,之后便遇到紧随其后的语句 goto _end 而自动退出批处理程序,也就是说,:_batch 之后的指令并不会被执行。现将修改版陈列如下。用户只需直接套用,即将省略号处改为自己的代码即可。用虚拟机做测试,以虚拟软驱启动时,注意 a:\ 下是否存在之前生成的 sig_ntfs 文件。
rem ---- 此处为文件头 -------------------------
if "%1"=="auto" goto _batch
......
ntfs4dos.exe a:\command.com /k a:\autoexec.bat auto
:_batch
if "%cmdline%"=="" goto __make_sign
if exist a:\sig_ntfs goto _end
:__continue
......
goto _end
:__make_sign
echo Generate a label to indicate the existence NTFS hard disk partition. > a:\sig_ntfs
goto __continue
:_end
a:
rem ----此处为文件尾 --------------------------
[ Last edited by dosfuner on 2010-2-23 at 20:05 ]
|
|
2009-1-22 12:27 |
|
|
nobodytt
初级用户
积分 78
发帖 33
注册 2008-12-9
状态 离线
|
『第
2 楼』:
如果用 ntfs4dos command /k a:\autoexec.bat ,则执行后就不会自动退出ntfs
要退出ntfs可以使用exit
[ Last edited by nobodytt on 2009-1-23 at 11:52 ]
|
|
2009-1-23 11:46 |
|
|
dosfuner
新手上路
积分 13
发帖 7
注册 2007-4-15
状态 离线
|
『第
3 楼』:
Quote: | Originally posted by nobodytt at 2009-1-23 11:46 AM:
如果用 ntfs4dos command /k a:\autoexec.bat ,则执行后就不会自动退出ntfs
要退出ntfs可以使用exit
[ Last edited by nobodytt on 2009-1-23 at 11:52 ] |
|
试了一下带 /K 参数的 command.com, 的确好用!
不过, 上述方法又有新问题 --
若在 autoexec.bat 中调用 ntfs4dos.exe command /k autoexe.bat, 则应无限循环下去, 而且 ntfs4dos.exe 以下的批指令将永远不会被执行. 但实际情况是, autoexec.bat 中的批指令被执行了两次......
|
|
2009-1-23 12:46 |
|
|
nobodytt
初级用户
积分 78
发帖 33
注册 2008-12-9
状态 离线
|
『第
4 楼』:
autoexec.bat是dos启动默认执行的批处理,它在启动时执行了一次,后来又在ntfs4dos中执行了一次
|
|
2009-1-23 17:41 |
|
|
dosfuner
新手上路
积分 13
发帖 7
注册 2007-4-15
状态 离线
|
『第
5 楼』:
改动一下, 即可使其实现只执行一次批处理:
rem ---- 此处为文件头 -------------------------
if "%1"=="auto" goto _batch
......
ntfs4dos.exe a:\command.com /k a:\autoexec.bat auto
goto _end
:_batch
......
:_end
a:
rem ----此处为文件尾 --------------------------
当然, 此法只适用于对 autoexec.bat 或对批处理程序自身的递归调用. 若在 ntfs4dos.exe 命令行中调用其他批处理程序, 则不必如此繁琐.
|
|
2009-1-25 11:33 |
|
|
martin325
银牌会员
积分 1582
发帖 603
注册 2006-2-20
状态 离线
|
|
2009-3-18 12:09 |
|
|
bigfeet
新手上路
积分 19
发帖 9
注册 2008-12-29
状态 离线
|
『第
7 楼』:
发现exit后,以后的bat命令就不能继续了,就跳进了类似a:\里,有没有什么原因可以避免之?
|
|
2009-4-21 05:18 |
|