中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 02:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [转贴][讨论]生成《CMD命令速查手册》的批处理
楼 主 [转贴][讨论]生成《CMD命令速查手册》的批处理 发表于 2005-12-20 13:00 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
To All:

在“百度:知道:DOS吧”翻到了一篇帖子,提到了如何生成《CMD命令速查手册》,因为不是原创文章,就不再提供链接了。大家可以通过搜索引擎找到。不知道这位作者 junluck 是否是论坛中的哪位,不妨一起参与探讨一下。如果获到一个良好而稳定的版本,我会将此主题转移至“教学室”。

对代码进行初步研究后,作了一些小的改进,主要合并了XP与非XP环境下(可能是NT4/2K)的两段代码,再就是将目录表格化等细节上的改变。因为没有非XP的NT系统,所以无法做出更全面的测试。如果出现问题,我会换用另一种方案处理HELP命令输出。


@echo off
del CMD命令速查手册.htm >nul
echo.===============================
echo......请稍候,构造htm文件中.....
echo.===============================

>CMD命令速查手册.htm echo ^<head^>
>>CMD命令速查手册.htm echo ^<title^>CMD命令速查手册^</title^>
>>CMD命令速查手册.htm echo ^<meta http-equiv="Content-Type" content="text/html^; charset=gb2312" ^/^>
>>CMD命令速查手册.htm echo ^</head^>
>>CMD命令速查手册.htm echo ^<A NAME="Top"^>
>>CMD命令速查手册.htm echo ^<center^>
>>CMD命令速查手册.htm echo ^<h1^>CMD 命令速查手册^</h1^>
>>CMD命令速查手册.htm echo Written by junluck %date%
>>CMD命令速查手册.htm echo ^</center^>
>>CMD命令速查手册.htm echo ^<br^>

ver|find "Windows XP" && goto:joke

for /f "tokens=1*" %%i in ('help^|more +3') do (
help %%i>nul && echo ^<a href="#%%i"^>%%i^</a^>^ ^ %%j >>CMD命令速查手册.htm || echo ^ ^ ^ ^ %%i %%j>>CMD命令速查手册.htm
>>CMD命令速查手册.htm echo ^</br^>
)

for /f %%i in ('help^|more +3') do (
help %%i>nul && (
>>CMD命令速查手册.htm echo ^<a name="%%i"^>
>>CMD命令速查手册.htm echo ^<h2^>%%i^</h2^>
>>CMD命令速查手册.htm echo ^<pre^>
help %%i>>CMD命令速查手册.htm
>>CMD命令速查手册.htm echo ^</pre^>
>>CMD命令速查手册.htm echo ^<a href="#top"^>返回页首^</a^>
)
)
start CMD命令速查手册.htm
goto:eof

:joke
for /f "tokens=1*" %%i in ('help^|more +1') do (
help %%i>nul && echo ^ ^ ^ ^ %%i %%j>>CMD命令速查手册.htm || echo ^<a href="#%%i"^>%%i^</a^>^ ^ %%j >>CMD命令速查手册.htm
>>CMD命令速查手册.htm echo ^</br^>
)

for /f %%i in ('help^|more +1') do (
help %%i>nul || (
>>CMD命令速查手册.htm echo ^<a name="%%i"^>
>>CMD命令速查手册.htm echo ^<h2^>%%i^</h2^>
>>CMD命令速查手册.htm echo ^<pre^>
help %%i>>CMD命令速查手册.htm
>>CMD命令速查手册.htm echo ^</pre^>
>>CMD命令速查手册.htm echo ^<a href="#top"^>返回页首^</a^>
)
)
start CMD命令速查手册.htm



:: CMDHelp.cmd - Gather commands' help of CMD to HTML
:: Author: junluck
:: Modify: Will Sort - 2005-12-19 - CMD@WinXP
@echo off & setlocal
echo.========================================
echo 开始创建《CMD命令速查手册》,请稍候……
echo 创建网页文件头……
>CMDHelp.htm echo ^<head^>
>>CMDHelp.htm echo ^<title^>CMD命令速查手册^</title^>
>>CMDHelp.htm echo ^<meta http-equiv="Content-Type" content="text/html^; charset=gb2312" ^/^>
>>CMDHelp.htm echo ^</head^>
>>CMDHelp.htm echo ^<A NAME="Top"^>
>>CMDHelp.htm echo ^<center^>^<h1^>CMD 命令速查手册^</h1^>junluck - %date%^</center^>^<br^>
>>CMDHelp.htm echo ^<table^>

ver | findstr "XP">nul && set head=1 || set head=3

echo 创建帮助目录……
for /f "tokens=1* skip=%head%" %%i in ('help') do (
echo %%i %%j | findstr /v "^" >>CMDHelp.htm
if errorlevel 1 echo ^</td^>^</tr^>^<tr^>^<td^>^<a href="#%%i"^>%%i^</a^>^</td^>^<td^>^ ^ ^ %%j>>CMDHelp.htm
)
>>CMDHelp.htm echo ^</td^>^</tr^>^</table^>^<br^>^<a href="#top"^>返回页首^</a^>^<br^>

echo 创建帮助正文……
for /f %%i in ('help^|findstr "^"') do (
echo 获取命令 %%i 帮助文档……
>>CMDHelp.htm echo ^<a name="%%i"^>^<h2^>%%i^</h2^>^<pre^>
help %%i>>CMDHelp.htm
>>CMDHelp.htm echo ^</pre^>^<a href="#top"^>返回页首^</a^>^<br^>^<br^>
)
echo 《CMD命令速查手册》创建完毕,任意键打开
echo.========================================
pause>nul && start CMDHelp.htm


[ Last edited by willsort on 2006-1-15 at 19:52 ]
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2 发表于 2006-01-11 15:07 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
To All:

机缘巧合下,得到了 Win2000 系统的测试机会,终于发现二者在 help 文本的兼容性上存在很多问题。前后修改到了三个版本,才得到了勉强都满意的结果。欢迎有 WinNT4 或者 Win2003 的朋友进行测试,并请将程序屏幕输出和网页生成的结果上传,我需要了解各种平台下 help 文本格式的更多信息。


:: CMDHelp.cmd - Gather commands' help of CMD to HTML
:: Author: junluck
:: Modify 3: Will Sort - 2006-01-11 - CMD@Win2000 / CMD@WinXP
@echo off & setlocal EnableDelayedExpansion
echo.========================================
echo 开始创建《CMD命令速查手册》,请稍候……
echo 创建网页文件头……
>CMDHelp.htm echo ^<head^>
>>CMDHelp.htm echo ^<title^>CMD命令速查手册^</title^>
>>CMDHelp.htm echo ^<meta http-equiv="Content-Type" content="text/html^; charset=gb2312" ^/^>
>>CMDHelp.htm echo ^</head^>
>>CMDHelp.htm echo ^<A NAME="Top"^>
>>CMDHelp.htm echo ^<center^>^<h1^>CMD 命令速查手册^</h1^>%username% - %date%^</center^>^<br^>
>>CMDHelp.htm echo ^<table^>

echo 创建帮助目录……
for /f "delims=:" %%f in ('help^|findstr /n "^ASSOC"') do set head=%%f
set /a head-=1
if "%head%"=="0" (set head=) else set head=skip=%head%
for /f "%head% delims=" %%i in ('help') do (
set str=%%i & set name=!str:~0,9! & set desc=!str:~9!
echo.!name! | findstr /v "^" >nul && echo !desc! >>CMDHelp.htm
if errorlevel 1 echo ^</td^>^</tr^>^<tr^>^<td^>^<a href="#!name!"^>!name!^</a^>^</td^>^<td^>^ ^ ^ !desc!>>CMDHelp.htm
)
>>CMDHelp.htm echo ^</td^>^</tr^>^</table^>^<br^>^<a href="#top"^>返回页首^</a^>^<br^>

echo 创建帮助正文……
for /f %%i in ('help^|findstr "^"') do (
>>CMDHelp.htm echo ^<a name="%%i"^>^<h2^>%%i^</h2^>^<pre^>
help %%i>>CMDHelp.htm
>>CMDHelp.htm echo ^</pre^>^<a href="#top"^>返回页首^</a^>^<br^>^<br^>
)
echo 《CMD命令速查手册》创建完毕,任意键打开
echo.========================================
pause>nul && start CMDHelp.htm
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
3 发表于 2006-01-11 18:18 ·  中国 福建 泉州 石狮市 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
UID 586
性别 男
来自 福建泉州
状态 离线
我是2003的系统
命令输出的<>格式和HTM的格式冲突,如下.
Microsoft DiskPart Copyright (C) 1999-2001 Microsoft Corporation.
On computer: USER4

Microsoft DiskPart 语法:
diskpart

/s <script> - 使用一个 DiskPart 脚本。
/? - 显示这个帮助屏幕。
以上文件若存为一HTM文件,只能显示到diskpart






附件
CMDHelp.rar (29.55 KiB, 下载附件所需积分 1 点, 下载次数: 211)
QQ:366840202
http://chenall.net
4 发表于 2006-01-13 01:12 ·  中国 重庆 联通
银牌会员
★★★
积分 2,202
发帖 499
注册 2003-06-12 00:00
UID 4876
性别 男
状态 离线
以下几年前在国外网站看到的,不知是否是它的源文:

@ECHO OFF
IF "%OS%"=="Windows_NT" SETLOCAL

:: Version number for this batch file
SET MyVer=1.30

:: Display "about"
ECHO.
ECHO AllHelp.bat, Version %MyVer% for Windows NT 4 / 2000 / XP
ECHO Generate an HTML help file for "all" available commands
ECHO.
ECHO Written by van der Woude
ECHO www.forumit.ronderwoude.com
ECHO.
ECHO.

IF NOT "%OS%"=="Windows_NT" SET MyVer=
IF NOT "%OS%"=="Windows_NT" GOTO End

ECHO Writing HTML header . . .
> allhelp.htm ECHO ^<HTML^>
>>allhelp.htm ECHO ^<HEAD^>
:: Read Windows version using VER command
FOR /F "tokens=1 delims=












































www.forumit.ronderwoude.com^</A^>^</P^>
>>allhelp.htm ECHO ^</CENTER^>
>>allhelp.htm ECHO.
>>allhelp.htm ECHO ^</BODY^>
>>allhelp.htm ECHO ^</HTML^>

ECHO.
ECHO An HTML help file "allhelp.htm" has been created and stored in the current
ECHO directory.
ECHO Now starting display of "allhelp.htm" . . .
START "AllHelp" allhelp.htm

:: End of main batch program
ENDLOCAL
GOTO:EOF


:: Subroutines


ispLine
SET Line=%1
SET Line=%Line=^(%
SET Line=%Line=^)%
SET Line=%Line:"=%
SET Command=%Line:~0,8%
SET Command=%Command: =%
IF DEFINED Command CALL ispCmdLine %Command%
FOR /F "tokens=1* delims= " %%a IN ('ECHO.%*' DO SET Descr=%%b
SET Descr=%Descr:"=%
>>allhelp.htm ECHO.%Descr%
GOTO:EOF


ispCmdLine
IF "%FirstCell%"=="0" IF DEFINED Command (>>allhelp.htm ECHO ^</TD^>^</TR^>
SET Command=%1
IF DEFINED Command (>>allhelp.htm ECHO ^<TR^>^<TH ALIGN="left" VALIGN="top"^>^<A HREF="#%Command%"^>%Command%^</A^>^</TH^>^<TD^>^&nbsp;^&nbsp;^&nbsp;^</TD^>^<TD^>
SET FirstCell=0
SET Command=
GOTO:EOF


ispFull
SET Line=%1
SET Command=%Line:~1,8%
SET Command=%Command: =%
IF DEFINED Command CALL :WriteFull %Command%
SET Command=
GOTO:EOF


:GetSP
SET SP=
:: Export registry tree to temporary file
START /WAIT REGEDIT.EXE /E "%Temp%.\%~n0.dat" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
IF NOT EXIST "%Temp%.\%~n0.dat" GOTO:EOF
:: Read value of "CSDVersion" from temporary file
FOR /F "tokens=2 delims==" %%A IN ('TYPE "%Temp%.\%~n0.dat" ^| FIND /I "CSDVersion"' DO SET SP=%%~A
:: Check if value is valid
ECHO.%SP% | FIND /I "Service Pack" >NUL
IF ERRORLEVEL 1 SET SP=
DEL "%Temp%.\%~n0.dat"
:: Use a shorter notation
IF DEFINED SP SET SP=%SP:Service Pack=SP%
GOTO:EOF


:WriteFull
ECHO. %1 . . .
>>allhelp.htm ECHO ^<A NAME="%1"^>
>>allhelp.htm ECHO.
>>allhelp.htm ECHO ^<H2^>%1^</H2^>
>>allhelp.htm ECHO.
>>allhelp.htm ECHO ^<PRE^>
>>allhelp.htm HELP %1
>>allhelp.htm ECHO ^</PRE^>
>>allhelp.htm ECHO.
>>allhelp.htm ECHO ^<A HREF="#Top"^>Back to the top of this page^</A^>
>>allhelp.htm ECHO.
>>allhelp.htm ECHO ^<P^>^&nbsp;^</P^>
>>allhelp.htm ECHO.
GOTO:EOF

:End


[ Last edited by willsort on 2006-1-15 at 19:02 ]
一年四季,枫叶红了又红;人生四季,失去的,还能再来吗?—— !
5 发表于 2006-01-15 19:24 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re chenall:

因为个人原因,无法及时回复,深感抱歉!

感谢兄所提供的测试报告,在2003下果然具有更复杂的细节,对应你所提到的几点修正了一个版本,显然它的效率越来越低了,而且它仍很有可能出现问题。因为这个版本只在 XP 下进行了测试,无法针对 2003 进行测试,所以其他平台的测试,还请 chenall 和其他兄弟施以援手了。

Re xiaojun:

感谢你提供的信息,我会仔细研究它的细节,同时希望可以提供代码的来源链接。另外,我在你帖子中的代码前后加入了 [code] 标签,以免标签的转义。


:: CMDHelp.cmd - Gather commands' help of CMD to HTML
:: Author: junluck
:: Modify 4: Will Sort - 2006-01-15 - CMD@WinXP
@echo off & setlocal EnableDelayedExpansion
echo.========================================
echo 开始创建《CMD命令速查手册》,请稍候……
echo 创建网页文件头……
>CMDHelp.htm echo ^<head^>
>>CMDHelp.htm echo ^<title^>CMD命令速查手册^</title^>
>>CMDHelp.htm echo ^<meta http-equiv="Content-Type" content="text/html^; charset=gb2312" ^/^>
>>CMDHelp.htm echo ^</head^>
>>CMDHelp.htm echo ^<A NAME="Top"^>
>>CMDHelp.htm echo ^<center^>^<h1^>CMD 命令速查手册^</h1^>%username% - %date%^</center^>^<br^>
>>CMDHelp.htm echo ^<table^>

echo 创建帮助目录……
for /f "delims=:" %%f in ('help^|findstr /n "^ASSOC"') do set head=%%f
set /a head-=1
if "%head%"=="0" (set head=) else set head=skip=%head%
for /f "%head% delims=" %%i in ('help') do (
set str=%%i & set name=!str:~0,9! & set desc=!str:~9!
echo.!name! | findstr /v "^" >nul && echo !desc! >>CMDHelp.htm
if errorlevel 1 echo ^</td^>^</tr^>^<tr^>^<td^>^<a href="#!name!"^>!name!^</a^>^</td^>^<td^>^ ^ ^ !desc!>>CMDHelp.htm
)
>>CMDHelp.htm echo ^</td^>^</tr^>^</table^>^<br^>^<a href="#top"^>返回页首^</a^>^<br^>

echo 创建帮助正文……
for /f %%i in ('help^|findstr "^"') do (
>>CMDHelp.htm echo ^<a name="%%i"^>^<h2^>%%i^</h2^>^<pre^>
if not "%%i"=="DRIVERQUERY" if not "%%i"=="EVENTQUERY" (
if "%%i"=="SC" (
echo Y | help %%i | findstr "<.*>" >nul
) else help %%i | findstr "<.*>" > nul
if not errorlevel 1 (
for /f "delims=" %%a in ('help %%i') do (
set st=%%a & set st=!st:^<=^&lt;! & set st=!st:^>=^&gt;!
echo !st!>> CMDHelp.htm
)
) else help %%i>>CMDHelp.htm
>>CMDHelp.htm echo ^</pre^>^<a href="#top"^>返回页首^</a^>^<br^>^<br^>
)
)

echo 《CMD命令速查手册》创建完毕,任意键打开
echo.========================================
pause>nul && start CMDHelp.htm


[ Last edited by willsort on 2006-1-15 at 19:54 ]
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
6 发表于 2006-01-19 20:08 ·  中国 福建 泉州 石狮市 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
UID 586
性别 男
来自 福建泉州
状态 离线
sc命令还是需要按Y没办法跳过。
我重新修改了一下,在WINDOWS 2003上运行正常了,到SC时需要按Y才能继续.


:: CMDHelp.cmd - Gather commands' help of CMD to HTML
:: Author: junluck
:: Modify 4: Will Sort - 2006-01-15 - CMD@WinXP
@echo off & setlocal EnableDelayedExpansion
echo.========================================
echo 开始创建《CMD命令速查手册》,请稍候……
echo 创建网页文件头……
>CMDHelp.htm echo ^<head^>
>>CMDHelp.htm echo ^<title^>CMD命令速查手册^</title^>
>>CMDHelp.htm echo ^<meta http-equiv="Content-Type" content="text/html^; charset=gb2312" ^/^>
>>CMDHelp.htm echo ^</head^>
>>CMDHelp.htm echo ^<A NAME="Top"^>
>>CMDHelp.htm echo ^<center^>^<h1^>CMD 命令速查手册^</h1^>%username% - %date%^</center^>^<br^>
>>CMDHelp.htm echo ^<table^>

echo 创建帮助目录……
for /f "delims=:" %%f in ('help^|findstr /n "^ASSOC"') do set head=%%f
set /a head-=1
if "%head%"=="0" (set head=) else set head=skip=%head%
for /f "%head% delims=" %%i in ('help') do (
set str=%%i & set name=!str:~0,9! & set desc=!str:~9!
echo.!name! | findstr /v "^" >nul && echo !desc! >>CMDHelp.htm
if errorlevel 1 echo ^</td^>^</tr^>^<tr^>^<td^>^<a href="#!name!"^>!name!^</a^>^</td^>^<td^>^ ^ ^ !desc!>>CMDHelp.htm
)
>>CMDHelp.htm echo ^</td^>^</tr^>^</table^>^<br^>^<a href="#top"^>返回页首^</a^>^<br^>

echo 创建帮助正文……
::将默认的脚本宿主改为 cScript.exe,不知还有没有更好的办法
cscript //h:cscript //b
::因为有一些命令需要使用cscript来启动
for /f %%i in ('help^|findstr "^"') do (
>>CMDHelp.htm echo ^<a name="%%i"^>^<h2^>%%i^</h2^>^<pre^>
echo 正在创建 %%i 的帮助正文中……
if /I "%%i"=="SC" echo 请按Y键继续……
help %%i | findstr "<.*>" >nul
if not errorlevel 1 (
for /f "delims=" %%a in ('help %%i') do (
set st=%%a & set st=!st:^<=^&lt;! & set st=!st:^>=^&gt;!
echo !st!>> CMDHelp.htm
)
) else help %%i>>CMDHelp.htm
>>CMDHelp.htm echo ^</pre^>^<a href="#top"^>返回页首^</a^>^<br^>^<br^>
)


echo 《CMD命令速查手册》创建完毕,任意键打开
echo.========================================
pause>nul && start CMDHelp.htm
QQ:366840202
http://chenall.net
7 发表于 2006-11-25 21:14 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
精彩的内容,收藏~:)
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
8 发表于 2006-11-26 09:12 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

  精彩绝伦了,收藏使用了。。
9 发表于 2006-11-26 21:03 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
UID 63486
来自 河北廊坊
状态 离线
学习了!
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
10 发表于 2007-02-14 09:27 ·  中国 浙江 台州 温岭市 电信
高级用户
★★
DOS学徒
积分 526
发帖 252
注册 2007-02-12 05:35
UID 79286
性别 男
状态 离线
ding
11 发表于 2007-03-01 02:31 ·  中国 广东 深圳 联通
新手上路
积分 11
发帖 4
注册 2007-02-28 06:11
UID 80373
性别 男
状态 离线
这个值得学习哦....
12 , 发表于 2007-03-05 02:36 ·  中国 广东 深圳 龙岗区 电信
新手上路
积分 9
发帖 6
注册 2006-12-19 02:58
UID 73904
性别 男
来自 uiui
状态 离线
不会呢
13 发表于 2007-03-07 09:27 ·  中国 上海 电信
初级用户
积分 25
发帖 12
注册 2007-03-01 04:09
UID 80443
性别 男
状态 离线
看不懂呀
14 发表于 2007-03-12 03:51 ·  中国 北京 海淀区 IDC机房
初级用户
☆流星雨◇帅气冲天狂
积分 24
发帖 21
注册 2007-03-09 08:10
UID 81176
性别 男
来自 广东
状态 离线
看贴回贴,养成好习惯
15 发表于 2007-03-13 08:36 ·  中国 湖北 武汉 电信
初级用户
积分 76
发帖 38
注册 2007-03-13 02:54
UID 81544
性别 男
状态 离线
论坛跳转: