我写了一个批处理文件,在计算机尝试关闭之前关闭所有程序,使用taskkill
函数结束特定程序。我在开始时使用了@echo off
,并在taskkill函数的末尾写了>null
,但是我仍然有一个命令提示窗口,详细说明了taskkill没有找到被告知要关闭的程序的错误。我正在运行Windows 10,如果这有帮助。
以下是两行不正常的代码:
@echo off
taskkill -f -t -im chrome.exe -im skype.exe -im WINWORD.exe >nul
如果你想看到它,这是完整的批处理文件:
REM Closes all programs, THEN turns off computer
@echo off
:: If you want to make a command prompt window appear, change this to “@echo on”
taskkill -f -t -im chrome.exe -im skype.exe -im WINWORD.exe >nul
:: Add all your program names here and an “/im” before them. Also if you want them to give you prompts before
:: shutting down, delete the "-f". Delete the ">nul"s if you want error messages
timeout 4 >nul
:: This will make the computer wait for between 3 and 4 seconds. This is designed for slower computers,
:: you can make the time delay less if you want
shutdown.exe -p -f >nul
:: This shuts down computer. -p makes it not have a time delay or display a message, -f quits programs just in case
exit
:: Exits in case it prevents computer from shutting down
由于
答案 0 :(得分:1)
StdOut和StdError不同。您只重定向了StdOut。
要将StdError重定向到StdOut的去向,请将其放在行
上2>&1
Cmd实际上将>
更改为1>
(如果您删除echo off
,则会在批处理中看到此内容。)
将StdError重定向到不同的地方
2> filename.txt
0=keyboard
1=screen for normal output
2=screen for error
3-9=whatever other files Cmd has open
答案 1 :(得分:1)
> nul丢弃发送到stdout或文件描述符1的输出。大多数命令将错误消息发送到单独的通道stderr(2)。您可以使用2> nul
将stderr重定向到nul。 (确保2
和>
之间没有空格;否则,2
将被视为命令的参数。)同时丢弃stderr和stdout通常这样做的时间:
taskkill ... >nul 2>&1
表示将stdout重定向到nul,并且以与stdout相同的方式处理stderr。
答案 2 :(得分:0)
尝试这样:
@echo off
set process=mshta.exe,chrome.exe,calc.exe,skype.exe,iexplore.exe
For %%a in (%process%) Do Call :KillMyProcess %%a
:KillMyProcess
Taskkill /IM "%1" /F >nul 2>&1