CmdExec: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (use %comspec% instead of $sysdir\cmd.exe)
Line 8: Line 8:


== Macro ==
== Macro ==
<highlight-nsis>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
<highlight-nsis>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  Execute a command with cmd.exe  
;;  Execute a command with cmd.exe
;;  P1 :in: Working directory (""=$outdir)  
;;  P1 :in: Working directory, ignored if "" ($OutDir is used)
;;  P2 :in: Command and parameters  
;;  P2 :in: Command and parameters
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!define Cmd "!insertmacro _CmdExec 0"         ; nopause/nowait
!define CmdExec "!insertmacro _CmdExec 0"
!define CmdWait "!insertmacro _CmdExec 1"     ; execwait
!define CmdPause "!insertmacro _CmdExec 1"
!define CmdPause "!insertmacro _CmdExec 2"     ; dospause
!define CmdWait "!insertmacro _CmdExec 2"
!define CmdPauseWait "!insertmacro _CmdExec 3" ; dospause+execwait
!define CmdPauseWait "!insertmacro _CmdExec 3"
!define CmdStay "!insertmacro _CmdExec 4"      ; stay in command prompt
!define CmdStay "!insertmacro _CmdExec 4"      ; Stay in command box after execution
!define CmdStayWait  "!insertmacro _CmdExec 5"  ; stay+execwait
!define CmdStayWait  "!insertmacro _CmdExec 5"  ; Stay in command box after execution, and wait for it to exit
;;
!macro _CmdExec _Mode_ _WorkDir_ _CommandAndParams_ ; Mode: 0=nopause/nowait, 1=dospause, 2=execwait, 3=dospause+execwait
!macro _CmdExec _Mode_ _WorkDir_ _CommandAndParams_
  Push $R0
   StrCmp "${_WorkDir_}" "" +3  
  ExpandEnvStrings $R0 '%COMSPEC%'
       Push $OutDir  
   StrCmp "${_WorkDir_}" "" +3
       SetOutPath "${_WorkDir_}"  
       Push $OutDir
   !if '${_Mode_}' == '1'  
       SetOutPath "${_WorkDir_}"
       ExecWait `"$SYSDIR\cmd.exe" /c "${_CommandAndParams_}"`  
   !if '${_Mode_}' == '1'
   !else if '${_Mode_}' == '2'  
       Exec `"$R0" /c "${_CommandAndParams_}" & echo. & echo. & pause`
       Exec `"$SYSDIR\cmd.exe" /c "${_CommandAndParams_}" & echo. & echo. & pause`  
   !else if '${_Mode_}' == '2'
   !else if '${_Mode_}' == '3'  
       ExecWait `"$R0" /c "${_CommandAndParams_}"`
       ExecWait `"$SYSDIR\cmd.exe" /c "${_CommandAndParams_}" & echo. & echo. & pause`  
   !else if '${_Mode_}' == '3'
       ExecWait `"$R0" /c "${_CommandAndParams_}" & echo. & echo. & pause`
   !else if '${_Mode_}' == '4'
   !else if '${_Mode_}' == '4'
       Exec `"$SYSDIR\cmd.exe" /k "${_CommandAndParams_}"`
       Exec `"$R0" /k "${_CommandAndParams_}"`
   !else if '${_Mode_}' == '5'
   !else if '${_Mode_}' == '5'
       ExecWait `"$SYSDIR\cmd.exe" /k "${_CommandAndParams_}"`
       ExecWait `"$R0" /k "${_CommandAndParams_}"`
   !else  
   !else
       Exec `"$SYSDIR\cmd.exe" /c "${_CommandAndParams_}"`  
       Exec `"$R0" /c "${_CommandAndParams_}"`
   !endif  
   !endif
   StrCmp "${_WorkDir_}" "" +4
   StrCmp "${_WorkDir_}" "" +3
       Exch $R0  
       Pop $R0
       SetOutPath "$R0"  
       SetOutPath "$R0"
      Pop $R0  
  Pop $R0
!macroend</highlight-nsis>
!macroend</highlight-nsis>


[[Category:Functions & Macros]]
[[Category:Functions & Macros]]

Revision as of 02:10, 6 February 2012

Author: Lloigor (talk, contrib)


Description

Use cmd.exe to execute a command and its parameters, with working dir, optional dospause, stayinprompt and execwait.

Example

${CmdPause} `$ParentFolder` `"d:\tools\free_upx\upx.exe" -v --brute $FileNames`

Macro

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  Execute a command with cmd.exe
;;  P1 :in: Working directory, ignored if "" ($OutDir is used)
;;  P2 :in: Command and parameters
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!define CmdExec "!insertmacro _CmdExec 0"
!define CmdPause "!insertmacro _CmdExec 1"
!define CmdWait "!insertmacro _CmdExec 2"
!define CmdPauseWait "!insertmacro _CmdExec 3"
!define CmdStay "!insertmacro _CmdExec 4"       ; Stay in command box after execution
!define CmdStayWait  "!insertmacro _CmdExec 5"  ; Stay in command box after execution, and wait for it to exit
!macro _CmdExec _Mode_ _WorkDir_ _CommandAndParams_  ; Mode: 0=nopause/nowait, 1=dospause, 2=execwait, 3=dospause+execwait
   Push $R0
   ExpandEnvStrings $R0 '%COMSPEC%'
   StrCmp "${_WorkDir_}" "" +3
      Push $OutDir
      SetOutPath "${_WorkDir_}"
   !if '${_Mode_}' == '1'
      Exec `"$R0" /c "${_CommandAndParams_}" & echo. & echo. & pause`
   !else if '${_Mode_}' == '2'
      ExecWait `"$R0" /c "${_CommandAndParams_}"`
   !else if '${_Mode_}' == '3'
      ExecWait `"$R0" /c "${_CommandAndParams_}" & echo. & echo. & pause`
   !else if '${_Mode_}' == '4'
      Exec `"$R0" /k "${_CommandAndParams_}"`
   !else if '${_Mode_}' == '5'
      ExecWait `"$R0" /k "${_CommandAndParams_}"`
   !else
      Exec `"$R0" /c "${_CommandAndParams_}"`
   !endif
   StrCmp "${_WorkDir_}" "" +3
      Pop $R0
      SetOutPath "$R0"
   Pop $R0
!macroend