zoukankan      html  css  js  c++  java
  • 简单的个人帮助系统

    编程的时候,需要参考许多的帮助,一个有良好组织习惯的人,一般会把需要用到的帮助都放到同一个文件夹里边,当要用到的时候,直接到文件夹中打开相应的帮助就可以了。但是bigtall的做法和大家可能有点不一样,因为我是一个懒惰的人,所以经常忘记把文档整理起来,而且不喜欢做什么事情都把一个资源管理器窗口打开着,我经常打开的窗口是cmd窗口,所以我编制了我自己的帮助系统:一个简单的批处理文件myhelp.bat。
    我的帮助系统有如下的优点:

    1. 使用简单,只需要简单输入命令就可以打开相应的帮助文件。比如打开样式表CSS2的帮助
      D:\WORK>myhelp css2
    2. 维护方便,需要增加新的帮助内容,我们只需要使用一个简单的名字和帮助文档关联起来,比如增加c#的帮助文档:
      D:\WORK>myhelp /a csharp "%ProgramFiles%\Microsoft Visual Studio 9.0\VC#\Specifications\2052\CSharp Language Specification.doc"
      如果您觉得每次打开word不方便,那就可以用/o参数指定一个应用程序,应用程序可以用简写代替,内置"ie"代表Internet Explorer
    3. 可以随时知道你有多少内置帮助存在,使用/l参数
    4. 修改方便,使用参数/e直接打开帮助批处理代码进行修改
    5. 你如果想学习批处理的编写,我的代码就是很好的参考,它包含了几乎所有的常用法,也包含了一定的高级用法。

    代码如下,请复制下来粘贴到文件中,记得文件要放在你的path查找范围内哦!

    @echo off
    rem ============================================================================
    rem
     可扩展的帮助系统
    rem
     记得修改 HELPDIR 参数的值
    rem
     ============================================================================

    rem 打开cmd扩展
    set TSTEXT=a
    if not #!TSTEXT!#==#a# (
        
    set TSTEXT=
        
    cmd.exe /V:ON /%0 %* 
        
    exit /b
    )
    set TSTEXT=

    rem ===================================
    rem
     请修改HELPDIR为你自己的存放位置
    set HELPDIR=d:\tools\help
    rem ===================================

    rem 清除残余的环境变量
    rem
     保存当前工作目录
    set CWD=%CD%
    rem 如果第一个参数是DEBUG,表明打开调试选项
    rem
     需要设DEBUG变量,剩余命令行放在CMDLINE变量中
    set DEBUG=
    set CMDLINE=
    set THIS=%~f0
    set THISNAME=%~nx0
    set THISDIR=%~dp0

    rem 生成随机数字
    set RND=%TIME::=.%-%RANDOM%
    rem
     生成8位日期数字
    set YYYYMMDD=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
    rem 生成精确到百分秒的8位时间数字
    set HHMMSSTT=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%

    rem 处理DEBUG参数,用于调试辅助
    set CMDLINE0=%*
    if #%1# == #DEBUG# set DEBUG=on
    if #%1# == #debug# set DEBUG=on
    if #%DEBUG%# == #on# set CMDLINE=%CMDLINE0:~5%
    if NOT #%DEBUG%# == #on# set CMDLINE=%CMDLINE0%
    set CMDLINE0=
    if #%DEBUG%# == #on# shift
    @
    if #%DEBUG%# == #on# @echo on

    rem 此处需要修改默认无参数的行为
    if #%1# == ## goto help
    rem 检查是否help显示
    if #%1# == #/?# goto help
    if #%1# == #-?# goto help
    if #%1# == #?# goto help
    for %%a in (help HELP /help /HELP -help -HELP --help --HELP h H //H -h -H --h --H ) do if #%1# == #%%a# goto help

    set MAINACTION=
    rem ----------------- 用户代码开始 ----------------- 
    set O_KEY=
    set O_SRC=
    set O_PROG=
    rem 处理参数循环开始
    :opt_an
    set __TEMP_O_=%1
    set NEXT_OPTION_PREFIX=%__TEMP_O_:~0,1%
    set NEXT_IS_OPTION=
    if not "%NEXT_OPTION_PREFIX%" == "/" if not "%NEXT_OPTION_PREFIX%" == "-" set NEXT_IS_OPTION=y
    set __TEMP_O_=
    rem 无后随参数
    for %%a in ( /e -e /E -E ) do if #%1# == #%%a# start notepad "%THIS%" && goto opt_exit
    rem 带后随数据的参数
    for %%a in ( /a -a /A -A ) do if #%1# == #%%a# goto opt_A
    for %%a in ( /o -o /O -O ) do if #%1# == #%%a# goto opt_O
    rem 这里处理可中断的无后随参数
    for %%a in ( /l -l /L -L ) do if #%1# == #%%a# set MAINACTION=list&& goto opt_exit
    rem 这里处理可中断的有后随参数
    rem
     这里处理非option参数
    if "%MAINACTION%" == "" set MAINACTION=provide
    goto opt_exit
    rem ----------------- 用户代码结束 -----------------
    rem
     处理无中断参数
    goto opt_nx
    :opt_A    
        
    set MAINACTION=add
        
    shift 
        
    if #%1# == ## goto help
        
    if #%2# == ## goto help
        
    set O_KEY=%1
        
    shift
        
    set O_SRC=%1
    goto opt_nx
    rem 处理可中断参数
    :opt_O
        
    shift 
        
    if #%1# == ## goto help
        
    set O_PROG=%1
    goto opt_exit
    rem 循环的判断
    :opt_nx
    shift
    if not #%1# == ## goto opt_an
    :opt_exit
    set NEXT_OPTION_PREFIX=
    rem 处理参数循环结束

    if #%MAINACTION%# == ## goto help
    goto start

    :help
    echo -----======================================================================-----
    echo usage: %THISNAME% [/a key src] [/o prog] helpkey1 helpkey2 
    echo        /a key src   添加一个新的帮助
    echo        /o program   打开帮助文件的可执行文件
    echo        /e           自动打开编辑%THISNAME%
    echo        /l           列举当前所有可以提供的帮助名称
    echo        helpkey      帮助名称
    goto end

    :start
    rem ----------------- 用户代码开始 ----------------- 
    if "%MAINACTION%" == "" goto help

    goto do_%MAINACTION%
    goto fin
    rem 用户正式处理代码,所有的功能标签直接用do_开头

    :do_provide
    set FNDKEY=
    for /"tokens=1 skip=180 delims= " %%i in ('type "%THIS%"') do (
        
    if "%FNDKEY%" == "" if /"%%i" == ":sub_%1" set FNDKEY=y
    )
    if "%FNDKEY%" == "" echo help for [%1not found! & goto l_prv_exit
    call:sub_%1
    :l_prv_exit
    set FNDKEY=
    shift
    if not "%1" == "" goto :do_provide
    goto fin


    :do_add
    set FNDKEY=
    for /"tokens=1 skip=180 delims= " %%i in ('type "%THIS%"') do (
        
    if "%FNDKEY%" == "" if /"%%i" == ":sub_%O_KEY%" set FNDKEY=y
    )
    if not "%FNDKEY%" == "" echo "help key %O_KEY% already exists, please use /e to edit!" & goto l_add_exit
    if '%O_PROG%' == 'ie' set O_PROG=%ProgramFiles%\Internet Explorer\iexplore.exe
    if "%O_PROG%" == "" set O_PROG=start "help %O_KEY%" 
    echo :sub_%O_KEY% >> "%THIS%"
    echo %O_PROG% %O_SRC% >> "%THIS%"
    echo goto :EOF >> "%THIS%"
    echo help %O_KEY% append OK!
    :l_add_exit
    set FNDKEY=
    goto fin

    :do_list
    for /"tokens=1 skip=180 delims= " %%i in ('type "%THIS%"') do (
        
    set LIST_KEY=%%i
        
    if /"!LIST_KEY:~0,5!" == ":sub_" echo !LIST_KEY:~5!
    )

    goto fin

    :fin
    rem 用户收尾代码,所有start之后的代码都跳转到这里结束
    rem
     ----------------- 用户代码结束 -----------------

    goto end

    :end
    rem ----------------- 用户代码开始 ----------------- 
    set O_KEY=
    set O_SRC=
    set O_PROG=

    set HELPDIR=
    rem ----------------- 用户代码结束 -----------------
    set NEXT_IS_OPTION=
    set NEXT_OPTION_PREFIX=
    set MAINACTION=

    set RND=
    set YYYYMMDD=
    set HHMMSSTT=
    set THIS=
    set THISNAME=
    set THISDIR=
    set CMDLINE=
    set DEBUG=
    set CWD=

    goto :EOF

    rem ------------帮助区,所有的帮助key用sub_开头,要更新帮助请编辑以下部分---------------


     

  • 相关阅读:
    防止论坛用户重复登录的方法 .
    配置Windows服务器支持json文件的方法
    在线修改ServU密码注意问题。
    a href=#与 a href=javascript:void(0) 的区别,以及location.href含义
    使用sql命令连接字符串类型和整型类型的数据
    数据库SQL Server 2005 的级联设置 外键赋值
    使用VS发布网站后遇到的Fill为Null的奇怪错误。
    使用Visual Studio 2005 IDE的宏,自动为c#变量生成属性
    推荐Zen Garden
    使用 aspnet_regsql.exe 向 SQL Express 数据库中注册脚本
  • 原文地址:https://www.cnblogs.com/BigTall/p/1364583.html
Copyright © 2011-2022 走看看