中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-26 05:34
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]NTFS4DOS.EXE 在批处理程序中运行的解决方案. 查看 1,725 回复 6
楼 主 [原创]NTFS4DOS.EXE 在批处理程序中运行的解决方案. 发表于 2009-01-22 12:27 ·  中国 辽宁 葫芦岛 联通
新手上路
积分 13
发帖 7
注册 2007-04-15 05:25
19年会员
UID 85224
性别 男
状态 离线
常见 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:
/? | /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 之后, 如何使其从内存中退出?

#########################################################################

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 ]
2 发表于 2009-01-23 11:46 ·  中国 河南 郑州 电信
初级用户
积分 78
发帖 33
注册 2008-12-09 12:08
17年会员
UID 133305
性别 男
状态 离线
如果用 ntfs4dos command /k a:\autoexec.bat ,则执行后就不会自动退出ntfs

要退出ntfs可以使用exit

[ Last edited by nobodytt on 2009-1-23 at 11:52 ]
3 发表于 2009-01-23 12:46 ·  中国 辽宁 葫芦岛 联通
新手上路
积分 13
发帖 7
注册 2007-04-15 05:25
19年会员
UID 85224
性别 男
状态 离线
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 中的批指令被执行了两次......
4 发表于 2009-01-23 17:41 ·  中国 河南 郑州 电信
初级用户
积分 78
发帖 33
注册 2008-12-09 12:08
17年会员
UID 133305
性别 男
状态 离线
autoexec.bat是dos启动默认执行的批处理,它在启动时执行了一次,后来又在ntfs4dos中执行了一次
5 发表于 2009-01-25 11:33 ·  中国 辽宁 葫芦岛 联通
新手上路
积分 13
发帖 7
注册 2007-04-15 05:25
19年会员
UID 85224
性别 男
状态 离线
改动一下, 即可使其实现只执行一次批处理:

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 命令行中调用其他批处理程序, 则不必如此繁琐.
6 发表于 2009-03-18 12:09 ·  中国 浙江 杭州 电信
银牌会员
★★★
积分 1,582
发帖 603
注册 2006-02-20 20:26
20年会员
UID 50690
状态 离线
非常感谢提供好方法,偶正好用上
7 发表于 2009-04-21 05:18 ·  中国 北京 清华大学
新手上路
积分 19
发帖 9
注册 2008-12-29 12:17
17年会员
UID 135236
性别 女
状态 离线
发现exit后,以后的bat命令就不能继续了,就跳进了类似a:\里,有没有什么原因可以避免之?
论坛跳转: