运行批处理命令但屏幕上没有结果

运行批处理命令但屏幕上没有结果

我在编写批处理文件时遇到了一个问题。我想知道是否有人能为我提供解决方案。这个文件很长,所以我想找到一种方法来减少代码编写。我有许多回显消息,它们会显示几秒钟,然后在文件移动到下一个屏幕/代码时消失。我知道我可以这样写...

@echo off
echo Message
ping localhost -n 3 >nul
cls

每次我想要延迟时都要写ping localhost -n 3 >nul,这很耗时。我知道我可以复制粘贴,但这对我的情况也不理想。我想到将变量设置为相等,ping localhost -n 3 >nul如下所示:

set delay3=ping localhost -n 3 >nul

这样我只需输入即可%delay3%节省时间。我发现这在功能上很好用,但有一个副作用。这样写的话,

@echo off
set delay3=ping localhost -n 3 >nul
echo Message
%delay3%
cls

尽管我@echo off在脚本开头已经写好了,我的批处理文件仍会在屏幕上显示所有 ping 数据。需要说明的是,只有当我使用%delay3%该代码版本时,这些数据才会显示在屏幕上。有人知道在以这种方式编码时如何使 ping 数据不显示在屏幕上吗?

答案1

当以这种方式编码时,如何使 ping 数据不显示在屏幕上?

问题出在你的set命令上:

set delay3=ping localhost -n 3 >nul

>nul用于丢弃输出)应用于set命令并且不存储在变量中。

另一方面:

set "delay3=ping localhost -n 3 >nul"

做你想做的事。

更正的批处理文件:

@echo off
set "delay3=ping localhost -n 3 >nul"
echo Message
%delay3%
cls
rem do other stuff
endlocal

示例输出:

> test
Message

>

进一步阅读

答案2

我确认 DavidPostill 的回答是有效的。

另一个解决方案是逃避“更大在 SET 命令中使用“插入符号“ 象征:

set delay3=ping localhost -n 3 ^>nul

其工作原理与“管道“ 符号。

在复杂的命令行中,转义特殊字符非常方便,结合 FOR、IF、FINDSTR... 并且错误流必须重定向到 NUL 或将输出流传输到其他命令。

你也可以使用更通用的版本:

set wait=ping localhost ^>nul -n

然后可以使用任意秒数:

%wait% 3
some command
%wait% 20
some other command

相关内容