自动化,加载 .prg 文件,运行 它带有预定义的变量

Automatisation, Load .prg file, run it with pre-defined variable

想法是在一个文件夹中有两个文件

test.csv
test.prg

我想 运行 使用 .bat 文件(或 .vbs)文件 test.prg 变量“2510”。

它会在 Visual Fox Pro 中自动加载(这里我不知道如何 运行 自动编写脚本而无需物理单击感叹号)并且 visual fox pro 应该使用 .bat/.vbs 文件中的变量作为 2510.

1) Open test.prg
2) Load VFP
3) Use pre defined variable from .bat/.vbs
4) Run script (automatically)
5) close VFP

因为是日常工作,尽量简化(目前只知道用cmd/.bat和vbs来简化)

确实不清楚您要做什么。但是,我从 VFP 创建了一个可能对您有所帮助的简单项目和程序。

启动VFP。在命令 window 中输入 创建项目 MyTest [enter]

单击“代码”选项卡,然后单击“新建”。粘贴以下代码片段

LPARAMETERS DOSParm1, DOSParm2, DOSParm3, DOSParm4

MESSAGEBOX( "Parm1: " + TRANSFORM( DOSParm1 ) + CHR(13)+CHR(10);
            + "Parm2: " + TRANSFORM( DOSParm2 ) + CHR(13)+CHR(10);
            + "Parm3: " + TRANSFORM( DOSParm3 ) + CHR(13)+CHR(10);
            + "Parm4: " + TRANSFORM( DOSParm4 ) + CHR(13)+CHR(10) )

RETURN 

将程序另存为MyTest.prg,然后单击项目的构建以创建可执行文件。现在你有一个简单的 EXE 文件,它接受来自 dos 命令或其他方法 (vbs) 的最多 4 个参数。您可以更改实际的 VFP 以对您需要的任何变量进行操作,但我只是将它们作为消息框输出显示。如果未提供任何参数,则默认值为逻辑 .F。 (假)

要在 DOS 提示符下进行测试,您可以这样做

MyTest oneParm anotherParm 3rd last

您将看到显示这 4 个参数字符串的消息框。

如果你跳过参数,没问题。

MyTest Only TwoParms

同样,可以更改代码以使用“2510”变量引用执行您需要的任何操作,并采取相应的行动。

如果我没理解错的话,您想要 运行 一个带有更改参数的 prg 文件,并且您想要更改调用 .bat 或 .vbs 文件中的参数。如果这是你想要做的,那么你可以简单地将 bat 文件内容设置为:

cd "c:\My Folder"
"c:\Program Files (x86)\Microsoft Visual Foxpro 9\vfp9.exe" test.prg 2510

并且您的 prg 将是 运行 和该参数。请记住,从命令行传递的参数始终是字符数据类型。

不过,还有更简单的方法。按照您的操作方式,您将编辑 .BAT 文件,保存它,然后双击执行。您可以在命令 window 中创建一个 VFP 可执行文件(假设 test.prg 在 c:\My Folder' 中):

set default to ('c:\My Folder')
build project MyTest from 'test.prg'
build exe MyTest from 'MyTest.pjx'

你会在该文件夹中有 MyTest.exe。您的 BAT 文件内容将是:

cd "c:\My Folder"
MyTest 2510

还是太麻烦了。您需要编辑.BAT 文件,更改参数,保存并双击它。让它更简单:

在您的 test.prg 中,不是从命令行获取参数,而是询问参数值并执行该过程!这完全消除了对 BAT 文件的需要。然后你只需在桌面上创建一个快捷方式。每当您双击该快捷方式时,它都会询问参数,然后使用该参数值进行处理并退出。这样的 test.prg 的内容看起来像:

_screen.Visible = .T.
LOCAL cInput
cInput = INPUTBOX("What is parameter value?", "Get parameter value", "2510", 5000, '', 'Cancelled')

DO case
 CASE m.cInput == ''
   ? 'Input timed out'
 CASE m.cInput == 'Cancelled'
   ? 'Cancelled'
 CASE m.cInput == '0' Or VAL(m.cInput) != 0
   Process( VAL(m.cInput) )
 OTHERWISE
   ? 'Parameter is not numeric'  
ENDCASE

QUIT


PROCEDURE Process(tnparameter)
 ? 'Processing with parameter =', m.tnParameter
Endproc

另外,作为命令行参数 returns 字符值的 inputbox(),您可以通过具有预期类型的​​表单获取值(即:形式获取日期)。