繁体   English   中英

如何从命令行将参数传递给UltraEdit脚本?

[英]How do I pass parameters to an UltraEdit script from the command line?

现在,使用以下命令从命令行执行UltraEdit脚本:

uedit64.exe /s="J:\SkyDrive\work\ue-script\newFile.js"

是否可以从命令行将参数传递给UltraEdit脚本? 以及如何在脚本中获取它们?

可能是这样的:

uedit64.exe /s="J:\SkyDrive\work\ue-script\newFile.js" /pars="parameter1=value1,parameter2=value2"

然后在newFile.js获取parameter1=value1parameter2=value2

UltraEdit脚本通常从命令行执行,以完全重新格式化一个或多个文本文件,而无需用户交互且不依赖于参数。 或者,用户可以使用getString和/或getValue在UltraEdit中手动启动UltraEdit脚本,而无需或仅需要很少的用户交互。 有许多脚本语言和脚本解释器可以根据VBScript,PowerShell,Perl,Python等参数来执行某些操作。

在UltraEdit的命令行上无法为UltraEdit宏/脚本指定其他自定义参数。 命令行参数由uedit64.exeuedit32.exe解释,UltraEdit宏和脚本无权访问可执行文件的参数列表。

在启动UltraEdit并执行脚本之前,我知道三种将字符串(参数)从另一个进程传递给UltraEdit脚本的可能性:

  1. 通过剪贴板,或
  2. 通过文本文件,或
  3. 通过在执行前修改脚本。

1.通过剪贴板将参数传递给UltraEdit / UEStudio脚本

第一个解决方案易于实现。 但是它有一个很大的缺点,即Windows剪贴板上的内容在启动时会被修改,并且在脚本读取参数及其值之前,没有其他进程可以将某些内容复制到剪贴板上。 如果应在后台执行UltraEdit来执行脚本,则这些缺点非常成问题。

必须在命令行或批处理文件中执行以下两个命令:

echo parameter1=value1,parameter2=value2 | %SystemRoot%\System32\clip.exe
uedit64.exe /fni /s="J:\SkyDrive\work\ue-script\newFile.js"

从Windows Vista和Windows Server 2003开始可以使用clip.exe 。但是Windows XP上没有clip.exe 但是,Windows Server 2003中的clip.exe也可以在Windows XP上使用。

强烈建议您在启动UltraEdit时使用/fni (强制执行新实例),以在默认情况下未选中配置设置“ 允许多个实例”时从命令行执行脚本。 有关为什么从命令行运行UltraEdit宏/脚本时/fni用作命令行上的第一个参数的信息,请阅读主题中的通过命令行参数(已解决)运行宏/脚本时始终获取错误消息 。 UltraEdit论坛。

用于从剪贴板读取参数的示例脚本代码为:

// Copy content of system (Windows/Mac/Linux) clipboard to a variable.
UltraEdit.selectClipboard(0);
var sParameterList = UltraEdit.clipboardContent;

// For safety check if the first parameter string begins with "parameter1".
if (sParameterList.indexOf("parameter1") == 0)
{
    // Remove trailing withspaces from parameter list
    var sParameterList = sParameterList.replace(/\s+$/,"");

    // Split up the parameters list using comma as delimiter.
    var asParameterList = sParameterList.split(',');

    // For demonstration just open a message box listing the read
    // parameters with their values without splitting them up further.
    var sMessageText = "The parameter";
    if (asParameterList.length > 1)
    {
        sMessageText += "s are:\n";
    }
    else
    {
        sMessageText += " is:\n";
    }
    for (var nParameter = 0; nParameter < asParameterList.length; nParameter++)
    {
        sMessageText += '\n   "' +  asParameterList[nParameter] + '"';
    }
    UltraEdit.messageBox(sMessageText,"List of parameters");
}

2.通过文本文件将参数传递给UltraEdit / UEStudio脚本

与第一种解决方案相比,剪贴板没有使用此解决方案进行修改。 但是,必须确保两个进程不会同时执行以下命令行。

> C:\Temp\ParameterList.tmp echo parameter1=value1,parameter2=value2
start "" /wait uedit64.exe /fni /s="J:\SkyDrive\work\ue-script\newFile.js"
del C:\Temp\ParameterList.tmp

由命令ECHO输出的行被重定向到文本文件C:\\Temp\\ParameterList.tmp ,然后启动UltraEdit以在单独的进程中运行脚本,并且中止批处理,直到退出UltraEdit。 最后,从命令行删除临时文本文件。

用于从具有固定名称和路径的文件中读取参数的示例脚本代码:

// Define the name of the file with the parameters with full path.
// The usage of environment variables in file name is not possible.
var sParameterListFile = "C:\\Temp\\ParameterList.tmp";

// Remember document index of active document which requires UltraEdit for
// Windows v16.00 or UEStudio v10.00. It would be possible to use code to
// get document index of active document on using an even older version of
// UltraEdit or UEStudio.
var nActiveDocIndex = UltraEdit.activeDocumentIdx;

// Open the parameter list file. This file should not be opened already
// before running this script. Otherwise additional code would be needed
// to search first in list of opened files for this file and read the
// parameters from already opened file and keep the file open instead
// of opening it and closing it after reading the first line.
UltraEdit.open(sParameterListFile);

// Test with a case-sensitive string comparison if the file could be really
// opened successfully in which case the parameter list file is the active
// file whose path property is the full name of the file with path.
if (UltraEdit.activeDocument.path == sParameterListFile)
{
    // Define environment for this script.
    UltraEdit.insertMode();
    UltraEdit.columnModeOff();

    // Read from the parameter list file just the first line without
    // the line terminating character(s) and split up the parameters
    // list using comma as delimiter before closing the file.
    UltraEdit.activeDocument.startSelect();
    UltraEdit.activeDocument.key("END");
    UltraEdit.activeDocument.endSelect();
    var asParameterList = UltraEdit.activeDocument.selection.split(',');
    UltraEdit.closeFile(UltraEdit.activeDocument.path,2);

    // For safety check if the first parameter string begins with "parameter1".
    if (asParameterList[0].indexOf("parameter1") == 0)
    {
        // For demonstration just open a message box listing the read
        // parameters with their values without splitting them up further.
        var sMessageText = "The parameter";
        if (asParameterList.length > 1)
        {
            sMessageText += "s are:\n";
        }
        else
        {
            sMessageText += " is:\n";
        }
        for (var nParameter = 0; nParameter < asParameterList.length; nParameter++)
        {
            sMessageText += '\n"' +  asParameterList[nParameter] + '"';
        }
        UltraEdit.messageBox(sMessageText,"List of parameters");
    }

    // Make the previously active document again the active
    // document if there was any document opened before at all.
    if (nActiveDocIndex >= 0)
    {
        UltraEdit.document[nActiveDocIndex].setActive();
    }
}

要使用动态文件名,必须先将文件名指定为第二个参数,UltraEdit才能在运行脚本之前将其打开,并且脚本将从第一个打开的文件中读取参数。

> "%TEMP%\Any File Name.txt" echo parameter1=value1,parameter2=value2
start "" /wait uedit64.exe /fni "%TEMP%\Any File Name.txt" /s="J:\SkyDrive\work\ue-script\newFile.js"
del "%TEMP%\Any File Name.txt"

该解决方案的脚本代码可能类似于:

if (UltraEdit.document.length > 0)  // Is any file opened?
{
    // Define environment for this script.
    UltraEdit.insertMode();
    UltraEdit.columnModeOff();

    // Move caret to top of first opened file which should
    // be the file with the parameters for the script.
    UltraEdit.document[0].top();

    // Read from the parameter list file just the first line without the
    // line terminating character(s) and split up the parameters list
    // using comma as delimiter. The parameter list file remains opened.
    UltraEdit.document[0].startSelect();
    UltraEdit.document[0].key("END");
    UltraEdit.document[0].endSelect();
    var asParameterList = UltraEdit.document[0].selection.split(',');

    // For safety check if the first parameter string begins with "parameter1".
    if (asParameterList[0].indexOf("parameter1") == 0)
    {
        // For demonstration just open a message box listing the read
        // parameters with their values without splitting them up further.
        var sMessageText = "The parameter";
        if (asParameterList.length > 1)
        {
            sMessageText += "s are:\n";
        }
        else
        {
            sMessageText += " is:\n";
        }
        for (var nParameter = 0; nParameter < asParameterList.length; nParameter++)
        {
            sMessageText += '\n"' +  asParameterList[nParameter] + '"';
        }
        UltraEdit.messageBox(sMessageText,"List of parameters");
    }
}

3.在执行之前修改脚本

UltraEdit脚本文件是ANSI文本文件,因此可以在执行之前修改脚本。

echo var asParameterList = [ "value1", "value2" ];>"%TEMP%\ParameterList.tmp"
copy /B "%TEMP%\ParameterList.tmp" + "J:\SkyDrive\work\ue-script\newFile.js" "%TEMP%\TempScript.js" >nul
start "" /wait uedit64.exe /fni /s="%TEMP%\TempScript.js"
del "%TEMP%\ParameterList.tmp" "%TEMP%\TempScript.js"

首先将定义字符串初始化数组的JavaScript代码行写入一个临时文件中。 将此临时文件与脚本文件一起复制到临时文件文件夹中的新脚本中。 使用带有添加的参数列表数组的临时脚本文件执行UltraEdit。 最后,两个临时文件都从命令行中删除。

一个示例脚本代码,该脚本代码在顶部带有附加的行来动态扩展,以定义参数字符串:

// For demonstration just open a message box listing the parameter
// values as defined at top of the script from outside UltraEdit.
var sMessageText = "The parameter value";
if (asParameterList.length > 1)
{
    sMessageText += "s are:\n";
}
else
{
    sMessageText += " is:\n";
}
for (var nParameter = 0; nParameter < asParameterList.length; nParameter++)
{
    sMessageText += '\n"' +  asParameterList[nParameter] + '"';
}
UltraEdit.messageBox(sMessageText,"List of parameter values");

这种方法的优势在于,除了参数字符串数组之外,还可以定义整数或浮点数数组。 或者在命令行上,定义了不同类型的多个变量,这些变量被添加到临时脚本文件中。

最后一种变种是在脚本文件顶部使用// include parameters.js ,然后在命令行上动态创建文件parameters.js (包含完整路径或不包含路径),其中包含将JavaScript语言中的参数定义为JavaScript的行变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM