使用命令行参数从bat文件运行exe

时间:2017-10-06 13:00:56

标签: windows batch-file

我正在构建一个安装包并有一个安装目录,(如果用户需要/想要,显然可能会改变)。在根安装目录的子目录中是一个bat文件,它复制文件,然后运行程序,然后运行另一个程序。它目前看起来像这样。

@echo off
xcopy %~d0\dir-files\record\*.* "%~dp0input" /Y
10th-f-Downsampling.exe start /wait

cd..
start Dashboard.exe 

问题是我需要在下采样exe中添加命令行参数--max_old_space_size = 3000

问题是为了做到这一点(根据我目前对有限的bat文件的理解)是创建一个快捷方式并以通常的Windows快捷方式输入命令行参数。我无法创建相对的快捷方式,也不确定如何做到最好。任何人的想法?

好的,所以我到目前为止设法创建一个bat文件,使用这个脚本在同一个dir中创建一个快捷方式....

@echo off

set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"

echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo sLinkFile = "ShortcutName.lnk" >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT%
echo oLink.TargetPath = "MyApp.exe" >> %SCRIPT%
echo oLink.WorkingDirectory ="" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%

cscript /nologo %SCRIPT%

del %SCRIPT%

但是我不确定如何将命令行参数包含在这个文件中...如果有人能给出一个令人惊讶的想法。

1 个答案:

答案 0 :(得分:1)

您可以使用%0%1%2格式获取cmd行参数。在当前代码中使用%~d0时,您将从参数letter drive中提取%0

This MS page can probably help you

奇怪的是,如果点击它,链接就会起作用,但对某些用户来说则不然。如果您想要将其粘贴到首选浏览器中,请选择以下路径。正如您在链接中看到的那样,这是从WindowsXP文档中提取的,这可以解释为什么链接充其量只是片状。

https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

编辑您似乎想要调用程序并在调用它时将该程序传递给该程序。并且您希望从bat文件启动该程序。这与我阅读你的标题的方式不同。

让我们从一些基础知识开始......为了便于参考,我们说我今天使用的程序称为GetToWork.exe

我正在使用的程序GetToWork.exe使我能够以多种不同的方式启动它。

  • 我可以双击以表格
  • 启动程序的exe
  • 我可以从CMD行调用exe并传递参数,这样它就可以做自动化的事情,而不需要做任何事情。
    1. 如果我希望程序自己完成所有操作,我可以传递参数--DontAskMeAnything
    2. 我可以传递参数--AskMeForNewFile,如果我希望程序在做某事之前问我,它会认为是新文件。
    3. 如果我希望参数以不同的方式执行,我可以将参数--DoItThisWayInstead传递给它。

现在,我不是决定我可以传递什么参数的人,也不是他们的结果。实际上,参数是由创建程序的程序员定义的。当他制定计划时,他决定将那些作为允许的参数,与他们相关的行动将成为他决定的行动。程序员记录了参数,现在我只想使用它们,因为它们让我的生活更轻松。

为了触发参数行为,我需要在运行时向程序提供所述参数。

  • 如果我想触发--DontAskMeAnything,我会写下这个命令:

    GetToWork.exe --DontAskMeAnything

  • 如果我想触发--AskMeForNewFile,那么我会写下这个命令:

    GetToWork.exe --AskMeForNewFile

  • 如果GetToWork.exe允许多个参数,我可能会写这样的东西:

    GetToWork.exe --AskMeForNewFile --DoItThisWayInstead

现在......回到和你的程序。您正在使用名为10th-f-Downsampling.exe的程序。我们,我,不知道该计划。我们,我不知道该程序的可能参数是什么。为了让您知道应该通过什么,您必须查找该程序的文档。有时只需用/?调用exe即可获得参数列表。同样,这取决于使程序成为/?的程序员只是程序员允许的另一个参数。 /?的结果通常是吐出可用的参数...

让我们分解您当前的代码

xcopy %~d0\dir-files\record\*.* "%~dp0input" /Y
  • 在这里,您呼叫的程序是xcopy
  • 您传递给xcopy的第一个参数是%~d0\dir-files\record\*.*
  • 您传递的第二个参数是"%~dp0input"
  • 您传递的第三个参数是/Y

如果您要进入命令提示符并运行此命令xcopy /?,您将获得一段文本,向您显示如何调用该程序,以及可以传递的参数列表。虽然参数通常通过名称识别......但他们的名字意义不大因为一旦在程序中,程序员可能已对其进行编码,以便只有参数位置重要,或位置和名称,或其他任何其他鸡尾酒他所要求的业务规则。虽然如果文档中提供了说明,请按照说明进行操作非常重要。