2017-10-06 192 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