Disable Press Key to Continue for Timeout in Batch

Why batch?

No, really. It's great for quick things, but complex scripts should use a proper scripting language. vbScript at the very least, but PowerShell should be what you're using at this point.

Was this post helpful? thumb_up thumb_down

as im trying to do this in PDQ deploy and the only script it gives me to make is a bat file

Was this post helpful? thumb_up thumb_down

If you are waiting for a user prompt then it has to be a user script, but if it is uninstalling a program, unless it is an administrator that logs in the script might fail anyway.  Unless I'm missing something.

Edit: although I don't know how pdq does the script thing. I was thinking logon scripts.

Was this post helpful? thumb_up thumb_down

yeah the script will be a user prompt to say press any key to quit otherwise it will continue with all the other steps to unistall/install programs

Was this post helpful? thumb_up thumb_down

Batch is really a sequential scripting language. Good for doing things in a certain order, so canceling during the uninstall operation without a a control-break is not going to work.

However you could do a script that waits for 30 seconds, press ctrl+c to cancel.

@echo off
echo Your PC will shutdown in 30 seconds! Press CTRL+C to abort.
ping -n 31 127.0.0.1>nul
<Enter install/uninstall command(s) here>

I think you could get fancier with a loop, maybe set input, if input != nul, then loop 30 times, checking to see if input is != nul would allow for an ANY key idea.

Was this post helpful? thumb_up thumb_down

Given that it would probably take more than 30 seconds for the average user to look for the "any" key, and then ask someone for help, I would specify pressing the space bar, but leave the script to accept any input.

Was this post helpful? thumb_up thumb_down

great thanks joshua it works!!!

is there anyway to show the time counting down so the user knows how much time they have left

how do i replace the CTRL+C with the space bar instead

Was this post helpful? thumb_up thumb_down

A tricky stuff you need. Neither pause nor timeout doesn't return a useful exit code you could use to make a decision. You need to "cheat" timeout command so it returns something different for break and something different for timeout.

Batchfile

              timeout /t 30              |findstr /r              ".0$"              &&              goto              continue                                          ||              exit              :              continue              REM continue installation of stuff after this point            

When you pipe timeout into find / findstr, it will display the current counter after the "press any key to continue." message. Now when you search for regular expression ".0$" in it, it will only be true when timeout has occurred, and will be false if some different number after the dot appears when a key was pressed during the wait. We can make use of it to actually check if key was pressed or not.

Was this post helpful? thumb_up thumb_down

great thanks joshua it works!!!

is there anyway to show the time counting down so the user knows how much time they have left

how do i replace the CTRL+C with the space bar instead

You can't. Besides ctrl+c always ends the script, so it's useless if you want to do some additional maintenance when installation is canceled.

Was this post helpful? thumb_up thumb_down

It might be easier to just train the users how to use CTRL + C and then just use a TIMEOUT for 30 seconds (or more).

Was this post helpful? thumb_up thumb_down

but how do i add a timeout command to Joshuas script?

Was this post helpful? thumb_up thumb_down

Robert,

  I am not sure we can pull off what you want. My script says, hey I am about to do something in 30 seconds, then uses the ping command 30 times to create a 30 seconds delay/timeout. then runs a command

However what I believe you want is hey i am about to do something, press any key to cancel, then it waits 30 seconds for an input and then performs it if no keys were entered

I am not sure batch can do this. However here are some alternatives.

  1. just deal with ctrl+c for breaking out of the script
  2. A batch file can call vbs script. which I think VBS will do what you want. (VBS is windows native)
  3. Bacon

Was this post helpful? thumb_up thumb_down

More help:

In windows vista/7 you have the choice command, which I think does what you want with C and N as input options

Batchfile

                        @            echo            off choice /c:CN /n /t:N,1800            "PC will restart in 30 minutes. Press N to restart Now, or C to Cancel"            if            errorlevel            2            (shutdown -r -t 60 -f)            else            echo            Restart Canceled          

then if you want some VBS to do it, I like this one:

VB.net

                        Set            objShell            =            CreateObject            (            "WScript.Shell"            )            for            i            =            30            to            1            step            -            1            if            i            =            1            then            unit            =            " minute"            else            unit            =            " minutes"            rtn            =            objShell            .            Popup            (            _            "The machine would like to Restart."            &            VbCrLf&VbCrLf&            _            "Click OK to restart now"            &            VbCrLf&            _            "Click Cancel or the [X] close button to abort the restart"            &            VbCrLf&            _            "Do nothing and the machine will restart in "            &            i&unit            ,            _            60            ,            "Restart in "            &            i&unit            ,            1            +            48            _            )            if            rtn            <>            -            1            then            exit            for            next            if            rtn            <>            2            then            objShell            .            Run            "shutdown -r -f"          

This what my google-fu turned up:Stack Overflow

Also you seem new to this, so i will add some more to this: You can take that vbs code copy it to notepad, then save it as a .vbs file.

Then from your batch file you can call that .vbs file form a unc path \\baconserver\share\command-promt.vbs

(I like this VBS script a lot and posted it to the spiceworks scripts page) If you have never heard of the spiceworks scripts page, it is awesome. You could probably search that all day every day and find any script you are looking for.(http://community.spiceworks.com/scripts)

Was this post helpful? thumb_up thumb_down

thanks

can i do a choice to either quit or to continue onto the next stage of the batch file

Was this post helpful? thumb_up thumb_down

Yes, that is what the choice command gives you

choice /c:CN /n /t:N,1800 "PC will restart in 30 minutes. Press N to restart Now, or C to Cancel" if errorlevel 2 (shutdown -r -t 60 -f) else echo Restart Canceled

Using

C to cancel
N for now

as the choice options

Was this post helpful? thumb_up thumb_down

blaisetoont1981.blogspot.com

Source: https://community.spiceworks.com/topic/1320401-batch-script-press-any-key-to-exit

0 Response to "Disable Press Key to Continue for Timeout in Batch"

Postar um comentário

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel