中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]NTFS4DOS.EXE 在批处理程序中运行的解决方案.
作者:
标题: [原创]NTFS4DOS.EXE 在批处理程序中运行的解决方案. 上一主题 | 下一主题
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
状态 离线
『第 6 楼』:  

非常感谢提供好方法,偶正好用上

2009-3-18 12:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bigfeet
新手上路





积分 19
发帖 9
注册 2008-12-29
状态 离线
『第 7 楼』:  

发现exit后,以后的bat命令就不能继续了,就跳进了类似a:\里,有没有什么原因可以避免之?

2009-4-21 05:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: