返回列表 发帖
@set @n=0/*& echo off
set "folder=d:\总文件夹"
copy /y xxx.gs xxx.gs.bak
cscript.exe -e:jscript "%~f0" "%folder%" || (pause&exit/b)
echo grads -blc "%folder%\xxx.gs"
rem do something you like.
exit/b
*/
folder = WScript.Arguments(0);
file = folder + "\\xxx.gs";
strQuery = "select name from CIM_DataFile where "
    + " drive='" + folder.substr(0,2) + "' and "
    + " path like '" + folder.substr(2).replace(/\\/g,'\\\\') + "\\\\%'"
    + " and extension='ctl'";
wmi = new ActiveXObject("WbemScripting.SWbemLocator").ConnectServer();
colFiles = wmi.ExecQuery(strQuery, "WQL", 48);
e = new Enumerator(colFiles);
arrFiles = [];
for (; !e.atEnd(); e.moveNext())  arrFiles.push(e.item().name);
txt = readtext(file);
i = 0;
txt = txt.replace(/^'open ([^']+)|^while\(i<=(\d+)\)/gm,
  function(s0,s1,s2){
    if (s1) return s0.replace(s1, arrFiles[i]);
    else return s0.replace(s2,
        readtext(arrFiles[i++]).match(/^tdef (\d+) linear/m)[1]);
  });
writetext(file, txt);
function readtext(file, charset)
{
    var text;
    var aso = new ActiveXObject('ADODB.Stream');
    aso.Mode = 3;
    aso.Type = 2;
    if (charset) aso.Charset = charset;
    else aso.Charset = 'gbk';
    aso.Open();
    aso.LoadFromFile(file);
    text = aso.ReadText(-1);
    aso.Close();
    aso = null;
    return text;
}
function writetext(file, text, charset)
{
    var aso = new ActiveXObject('ADODB.Stream');
    aso.Mode = 3;
    aso.Type = 2;
    if (charset) aso.Charset = charset;
    else aso.Charset = 'gbk';
    aso.Open();
    aso.WriteText(text);
    aso.SaveToFile(file, 2);
    aso.Close();
    aso = null;
}COPY
继续将JavaScript发扬光大。
1

评分人数

    • cpp: 感谢帮助技术 + 1

TOP

回复 7# cpp


    将3楼的代码整个保存为一个bat文件运行即可(将有关路径按实际情况修改)。这是bat+js二合一。

TOP

楼主比较幸运,代码中有“while(i<=6)”,但没有“if(!x)”之类(看到前面这种形式很容易联想到后者)。如果有感叹号!,用那些bat文件处理后可能导致很严重的后果。

TOP

返回列表