使用@echo off和> nul

时间:2016-02-22 20:14:01

标签: windows batch-file command-line

我写了一个批处理文件,在计算机尝试关闭之前关闭所有程序,使用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

由于

3 个答案:

答案 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