2017-10-06 270 views
0

我正在构建一个安装包并且有一个安装目录,(如果用户需要/想要,显然可以更改)。在根目录下的子目录中安装目录是一个bat文件,用于复制文件,然后运行程序,然后运行另一个程序。它目前看起来像这样。使用命令行参数从bat文件运行exe文件

@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文件的理解是有限的)是以通常的窗口快捷方式创建快捷方式并输入命令行参数。我无法创建一个相对的快捷方式,我不知道如何最好地做到这一点。任何想法任何人?

行,所以我至今成功地创建一个用于创建使用该脚本在同一目录的快捷方式一个bat文件....

@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

cmd行参数以“%0”,“%1”,“%2”的形式提供给您。使用当前代码中的'%〜d0',您从参数'%0'中拉取'letter drive' –

+2

_command line argument_是放置在同一行中可执行文件名称后面的文本。你的问题的答案是:'10-f-Downsampling.exe start/wait max_old_space_size = 3000',所以也许你对你想要的描述感到困惑...... – Aacini

+1

我认为@Aacini提出了一个有效的观点。如果你不需要这个参数是动态的,那么就按照他的方式对它进行硬编码。 –

回答

1

可以以%0%1,%2的形式提供cmd行参数。在您当前的代码中使用%~d0,您正在从参数%0中提取letter drive

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我会写这样的命令:如果我想触发--AskMeForNewFile

    GetToWork.exe --DontAskMeAnything

  • ,那么我会写这样的命令:

    GetToWork.exe --AskMeForNewFile

  • 如果GetToWork.exe allo WS多个参数,我想也许写的是这样的:

    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 /?,你会得到文本块向您展示如何调用该程序,用一个列表一起可以传递的参数。尽管参数通常是按名称来识别的......他们的名字有意思不大,因为一旦在程序中,程序员可能已经编码了它,以便只有参数位置很重要,或者位置和名称或任何其他商业规则鸡尾酒通过。尽管如果文档中提供了指导,遵循说明很重要。

+0

链接不工作 – greggycoding

+0

@greggycoding,我添加了实际的链接。希望这对你有用。 –

+0

不错的一个谢谢你,我不明白我将如何写在蝙蝠文件中什么将简单地在一个快捷方式“file.exe”(参数) – greggycoding