• jscript调用bat注意事项


    开发的游戏项目,需要一个工具,对指定的资源进行复制、加密,然后打包。之前打包时都手工操作,复制与加密这二步分别写了几个工具(lua加密与图片资源加密是分开的),后来感觉bat操作路径特别麻烦,所以我改用了hta写了一个界面,让使用者可以输入版本号,控制台上显示程序运行状态…

     

    写到的过程中,遇到几个坑,一并在这里记录下来。

    ===============================================

    bat

    遍历一个目录,并在另外一个目录创建相同的目录文件

    cd /d %src_dir%
    setlocal EnableDelayedExpansion
    for /r /d %%i in (%src_dir%) do (
    set relativePath=%%i
    set relativePath=!relativePath:%src_dir%=!
    set targetFullPath=%target_dir%!relativePath!

    if exist !targetFullPath! rd /s /q !targetFullPath!
    mkdir !targetFullPath!
    )
    endlocal


    这里主要在于使用了“EnableDelayedExpansion” (延迟环境变量扩展),为什么要使用它呢?看下面的一个示例:

    @echo off 
    for /l %%i in (1,1,5) do (
    set var=%%i
    echo %var%
    )
     
    上面的代码执行后会输出5个空行,有人可能会问,不是把变量%%i赋值给var变量了吗?在这里如果想达到预期的目的,就需要使用“EnableDelayedExpansion”了
    @echo off 
    setlocal ENABLEDELAYEDEXPANSION
    for /l %%i in (1,1,5) do (
    set var=%%i
    echo !var!
    )
    endlocal

    在开启“EnableDelayedExpansion”中,使用!!来替换%%进行操作

     

    字符串替换的语法:%var:str1=str2%,将字符串var中所有的str替换为str2

    所以上面的=!relativePath:%src_dir%=!就容易理解了吧

    bat中调用应用程序

    start ["title"] [/dPath] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/b] [FileName] [parameters]

    start luac.exe –o path1 path2

     

    hta调用bat

    这个其实没有什么难度,方法也十分简单

    var wsh = new ActiveXObject("WScript.Shell");

    var rs = wsh.Run(“d:xxxx.bat param1 param2”, 0, true);

     

    WScript.Shell 提供对本地Window外壳程序的访问,它拥有3个属性及11个方法。

    属性:CurrentDirectoryEnvironmentSpecialFolders

    方法:

    AppActivate、CreateShortcutExpandEnvironmentStrings、LogEvent、Popup、RegDelete、RegRead、RegRead、RegWrite、Run、SendKeysExec

    hta调用bat使用的就是Run方法,这里重点介绍一下Run方法

    object.Run(strCommand, [intWindowStyle], [bWaitOnReturn]) 

     

    参数

    object

    WshShell 对象。
    strCommand
    表示要运行的命令行的字符串值。必须包括要传递到可执行文件的所有参数。
    intWindowStyle
    可选。表示程序窗口外观的整数值。请注意,并非所有程序都使用此信息。
    bWaitOnReturn
    可选。布尔值,表示在继续执行脚本中的下一条语句之前,脚本是否等待执行完程序。如果设为 true,则在执行完程序后才执行脚本,Run 方法返回由程序返回的任何错误代码。如果设为 false(默认值),则 Run 方法将自动在启动程序后立即返回 0(不是错误代码)。

    Run 方法返回一个整数。Run 方法启动在新 Windows 进程中运行的程序。可以让脚本等到程序执行完后再继续执行。这允许您同步运行脚本和程序。strCommand 参数内的环境变量自动扩展。如果某个文件类型已正确注册到某个程序中,则对该类型的文件调用 Run 方法时将执行该程序。例如,如果您的计算机系统中装有 Word,则对 *.doc 文件调用 Run 方法时将启动 Word 并加载该文档。下表列出了 intWindowStyle 的可用设置。

     

    在调用bat的时候可以传递参数,上面的param1、param2就是传入的参数,在bat中通过%1、%2..%n进行获取。

     

    只是如果传入的参数是路径,必须是“”而不能为“/”,否则某些应用程序在读取路径时会找不到路径,导致程序执行失败。

     

    通过WScript.Shell对象获取应用程序的执行目录,例如现在想获得WinRAR的应用程序目录:

    rarPath = wsh.RegRead("HKEY_CLASSES_ROOT\WinRAR\shell\open\command\").match(/"([^"]*)"/)[1];

    调用Run方法便可以调用它了

     

    WinRAR常用的参数

    a 添加文件到压缩文件
    -r 包含子文件夹
    -ep1 将需要打包的文件夹目录包含进去,-ep不包含
    -inul 禁用所有消息
    -df 压缩后删除文件
    m<0..5>       设置压缩级别(0-存储...3-默认...5-最大)

    -x 排除指定的文件

    x@<列表> 排除指定列表文件中的文件

    n<文件> 仅包含指定的文件

    n@ 从标准输入设备读取文件名到包括

    n@<列表> 在指定的文件列表包括文件

    例:仅打包该目录下的*.xml文件 “WinRAR.exe a -ep -m5 -inul -n*.xml”

     

    ===============================================

    如果想深入学习和了解bat,建议下载Visual Bat软件进行学习,内置chm帮助文档

    hat,建议下载HtaEdit进行学习

  • 相关阅读:
    node的安装与配置
    linux下查看是否安装某个软件
    怎么把apk文件部署在云服务器上
    github怎么搜索!!!
    node.js搭建本地服务器的两种方式(anywhere和http-server)
    js中迭代方法
    yarn和npm的区别
    总结一下测试工程师学习的博客和网站
    我的周记1——”云想衣裳花想容"
    2019/11/22 再聊职业规划——5年后,你想成为怎样的人?
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/3396366.html
Copyright © 2020-2023  润新知