Reputation: 4180
I'm running a batch file that has these two lines:
start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
"C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow
This batch file is used to run the Xming application and then the PuTTY app so I can SSH into my university's computer lab.
However, if I run this and Xming is not already open, once I exit from the PuTTY terminal the cmd window remains open. Only if I have already run Xming does the cmd window close when I close the PuTTY terminal. I've tried adding exit
to the last line of the batch file, but to no avail.
Upvotes: 131
Views: 585881
Reputation: 1215
For me (Windows 10) the bat runs as follows.
Run application from bat with cmd window:
"my.exe" parameters
without cmd window:
start "my.exe" parameters
if parameters is a folder then the above should be
start "" "my.exe" c:/thfolderpath
Upvotes: 0
Reputation: 296
After reading several answers, I learned a couple of things with experimentation:
files ending with CMD vs BAT will be handled slightly differently.
I was trying to run with silentCMD.exe but the problem is that silentCMD would always wait until any started program finished running before reporting task as being completed....even if the CMD window quit ahead of time.
using move nul 2>&0
does seem to work, but the exit code is never delivered properly. so when using task scheduler, it may have weird results unless you can somehow detect the exact weird result and workaround it.
Solution was to just run the task scheduler (or bat/cmd script) directly without using silentCMD to launch it.
.BAT
file extension@echo off
if not "%minimized%"=="" goto :minimized
set minimized=true
start /min cmd /C "%~dpnx0"
goto :EOF
:minimized
taskkill /IM "Program.exe" /T /F
start "" "C:\Program.exe" /arg1 /arg2
TIMEOUT /T 2 /NOBREAK
EXIT /B
The if not "%minimized%"=="" goto :minimized
portion is to launch the bat (or cmd) minimized. difficult to get CMD window to be silent, so this is the next best thing.
BAT
files seem to just exit properly without having to do anything extra.
.CMD
file extension@echo off
if not "%minimized%"=="" goto :minimized
set minimized=true
start /min cmd /C "%~dpnx0"
goto :EOF
:minimized
taskkill /IM "Program.exe" /T /F
cmd /c start "" "C:\Program.exe" /arg1 /arg2
TIMEOUT /T 2 /NOBREAK
EXIT /B
You must use the cmd /c
before the start
in order to get the script to close after the launch.
Upvotes: 0
Reputation: 391
If you have the code
command which installs with VSCode:
echo | code . | exit /b
If you're running the script as administrator:
cd /d %~dp0
echo | code . | exit /b
Using start /b
will usually work to allow the cmd window to close for other programs.
Upvotes: 18
Reputation: 2565
To close the current cmd windows immediately, just add as the last command/line:
move nul 2>&0
Try move nul
to nowhere and redirect the stderr to stdin
will result in the current window cmd.exe being closed
This is different from closing a bat, or exiting it using goto :EOF
or Exit /b
I even opened a question to find an answer that would explain behavior. Would that be a bug? Immediate closing of the current cmd window when executing: move nul 2>&0
Upvotes: 10
Reputation: 365
Sometimes you can reference a Windows "shortcut" file to launch an application instead of using a ".bat" file, and it won't have the residual prompt problem. But it's not as flexible as bat files.
Upvotes: 0
Reputation: 39
Just try /s
as listed below.
As the last line in the batch file type:
exit /s
The above command will close the Windows CMD window.
/s
- stands for silent as in (it would wait for an input from the keyboard).
Upvotes: -1
Reputation: 449
You normally end a batch file with a line that just says exit
. If you want to make sure the file has run and the DOS window closes after 2 seconds, you can add the lines:
timeout 2 >nul
exit
But the exit
command will not work if your batch file opens another window, because while ever the second window is open the old DOS window will also be displayed.
SOLUTION: For example there's a great little free program called BgInfo which will display all the info about your computer. Assuming it's in a directory called C:\BgInfo
, to run it from a batch file with the /popup
switch and to close the DOS window while it still runs, use:
start "" "C:\BgInfo\BgInfo.exe" /popup
exit
Upvotes: 44
Reputation: 2452
If you want to separate the commands into one command per file, you can do
cmd /c start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
and in the other file, you can do
cmd /c start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow
The command cmd /c will close the command-prompt window after the exe was run.
Upvotes: 11
Reputation: 47
This worked for me. I just wanted to close the command window automatically after exiting the game. I just double click on the .bat file on my desktop. No shortcuts.
taskkill /f /IM explorer.exe
C:\"GOG Games"\Starcraft\Starcraft.exe
start explorer.exe
exit /B
Upvotes: 2
Reputation: 89
You could try the somewhat dangerous: taskkill /IM cmd.exe
..dangerous bcz that will kill the cmd that is open and any cmd's opened before it.
Or add a verification to confirm that you had the right cmd.exe and then kill it via PID, such as this:
set loc=%time%%random%
title=%loc%
for /f "tokens=2 delims= " %%A in ('tasklist /v ^| findstr /i "%loc%"') do (taskkill /PID %%A)
Substitute (pslist &&A)
or (tasklist /FI "PID eq %%A")
for the (taskkill /PID %%A)
if you want to check it first (and maybe have pstools installed).
Upvotes: 2
Reputation: 19
I had this, I added EXIT
and initially it didn't work, I guess per requiring the called program exiting
advice mentioned in another response here, however it now works without further ado - not sure what's caused this, but the point to note is that I'm calling a data file .html
rather than the program that handles it browser.exe
, I did not edit anything else but suffice it to say it's much neater just using a bat file to access the main access pages of those web documents and only having title.bat
, contents.bat
, index.bat
in the root folder with the rest of the content in a subfolder.
i.e.: contents.bat reads
cd subfolder
"contents.html"
exit
It also looks better if I change the bat file icons for just those items to suit the context they are in too, but that's another matter, hiding the bat files in the subfolder and creating custom icon shortcuts to them in the root folder with the images called for the customisation also hidden.
Upvotes: 0
Reputation: 12707
Modify the batch file to START
both programs, instead of START
ing one and CALL
ing another
start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow
If you run it like this, no CMD window will stay open after starting the program.
Upvotes: 179