Batch file 自动化,加载.prg文件,使用预定义变量运行它

Batch file 自动化,加载.prg文件,使用预定义变量运行它,batch-file,variables,cmd,visual-foxpro,Batch File,Variables,Cmd,Visual Foxpro,其思想是在一个文件夹中有两个文件 test.csv test.prg 我想使用.bat文件(或.vbs)运行带有变量“2510”的test.prg文件 它将自动加载到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

其思想是在一个文件夹中有两个文件

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

它将自动加载到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。在命令窗口中键入 创建项目MyTest[输入]

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

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,然后单击项目的build以创建可执行文件。现在您有了一个简单的EXE文件,它最多可以从dos命令或其他方法(vbs)接受4个参数。您可以更改实际的VFP来处理您需要的任何变量,但我只是将它们作为messagebox输出显示。如果未提供任何参数,则默认值将为logical.F。(错)

要从DOS提示符进行测试,可以执行以下操作

MyTest oneParm anotherParm 3rd last
您将看到显示这4个参数字符串的消息框

如果跳过参数,没有问题

MyTest Only TwoParms

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

不清楚您试图执行的操作。然而,从VFP中,我创建了一个简单的项目和程序,可能会对您有所帮助

启动VFP。在命令窗口中键入 创建项目MyTest[输入]

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

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,然后单击项目的build以创建可执行文件。现在您有了一个简单的EXE文件,它最多可以从dos命令或其他方法(vbs)接受4个参数。您可以更改实际的VFP来处理您需要的任何变量,但我只是将它们作为messagebox输出显示。如果未提供任何参数,则默认值将为logical.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文件,保存它,然后双击执行。您可以在命令窗口中创建一个VFP可执行文件(假设test.prg位于c:\My Folder中):

您将在该文件夹中拥有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

此外,您可以通过具有预期类型的表单(即:获取日期的表单上的datetimepicker)获取值,而不是像命令行参数那样返回字符值的inputbox()

如果我没弄错,您希望运行一个参数不断变化的prg文件,并且希望在调用.bat或.vbs文件中更改参数。如果这是您想要做的,那么您可以简单地拥有bat文件内容,如:

cd "c:\My Folder"
"c:\Program Files (x86)\Microsoft Visual Foxpro 9\vfp9.exe" test.prg 2510
您的prg将使用该参数运行。请记住,从命令行传递的参数始终是字符数据类型

然而,有一个更简单的方法。按照这种方式,您可以编辑.BAT文件,保存它,然后双击执行。您可以在命令窗口中创建一个VFP可执行文件(假设test.prg位于c:\My Folder中):

您将在该文件夹中拥有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
此外,您可以通过具有预期类型的表单(即:获取日期的表单上的datetimepicker)获取值,而不是像命令行参数那样返回字符值的inputbox()