我在编写批处理文件时遇到了一个问题。我想知道是否有人能为我提供解决方案。这个文件很长,所以我想找到一种方法来减少代码编写。我有许多回显消息,它们会显示几秒钟,然后在文件移动到下一个屏幕/代码时消失。我知道我可以这样写...
@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
>
进一步阅读
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 重定向- 重定向运算符。
- 放- 显示、设置或删除 CMD 环境变量。使用 SET 所做的更改将仅在当前 CMD 会话期间保留。
答案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