首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在批处理文件中隐藏逻辑结构,但显示实际执行的命令

问在批处理文件中隐藏逻辑结构,但显示实际执行的命令
EN

Stack Overflow用户
提问于 2012-01-24 09:24:43
回答 2查看 1.3K关注 0票数 3

我有一个批处理文件,其中有一个IF/ELSE IF块。我不希望代码块本身被“回显”给用户,因为这样做会打印出一整屏复杂的逻辑,很难确切地理解其中执行了什么。但是,我希望将在块中实际执行的命令回显给用户。

将@放在第一个IF前面会隐藏整个语句,而且似乎没有办法“取消隐藏”部分。尝试使用@echo off和@echo on来关闭主语句的屏幕报告和打开逻辑分支的屏幕报告,似乎也做不到这一点。帮助?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-24 09:57:30

它不是很漂亮,但它很有效:

代码语言:javascript
复制
@echo off
if 1==1 (
  echo on
  for %%a in (1) do echo command 1
  for %%a in (1) do echo command 2
)

你可以用一个小的宏来减少打字量。此示例还说明了如何处理嵌入式FOR命令。对于DO()子句中的所有命令,()前面的@有效地作为ECHO OFF。没有它,整个(...)将与其中的每个命令一样被回显。

代码语言:javascript
复制
@echo off
setlocal
set show=for %%a in (1) do
if 1==1 (
  echo on
  %show% echo command 1
  %show% echo command 2
  for /l %%n in (1 1 5) do @(
    %show% echo loop %%n A command IS shown
    echo loop %%n B command is NOT shown
  )
)
票数 1
EN

Stack Overflow用户

发布于 2012-01-25 00:12:52

您可以在您不想显示的行上重定向stdout到NUL。下面是我玩过的一些小把戏:

代码语言:javascript
复制
SET var=yes
ECHO Before the block
@IF "%var%" == "yes" (
  ping 1.1.1.1 -n 1 -w 1 > NUL
  ping 1.1.1.1 -n 2 -w 1
)
PAUSE

将隐藏IF块中的命令,并且只显示第二次ping的输出。

代码语言:javascript
复制
SET var=yes
ECHO Before the block
@(IF "%var%" == "yes" (
  ping 1.1.1.1 -n 1 -w 1
  ping 1.1.1.1 -n 2 -w 1
)) > NUL
PAUSE

将隐藏IF块,并且不会显示ping的输出。

代码语言:javascript
复制
SET var=yes
ECHO Before the block
(IF "%var%" == "yes" (
  ping 1.1.1.1 -n 1 -w 1
  ping 1.1.1.1 -n 2 -w 1
)) > NUL
PAUSE

将显示正在运行的命令,但不会在屏幕上显示任何输出。

代码语言:javascript
复制
SET var=yes
ECHO Before the block
@IF "%var%" == "yes" (
  ping 1.1.1.1 -n 1 -w 1
  ping 1.1.1.1 -n 2 -w 1
)
PAUSE

不会显示命令,但会显示输出。

编辑:这是另一个

代码语言:javascript
复制
SETLOCAL ENABLEDELAYEDEXPANSION
SET var=yes
ECHO Before the block
IF "%var%" == "yes" (
  @ping 1.1.1.1 -n 1 -w 1 > NUL
  @ping 1.1.1.1 -n 2 -w 1 > NUL
)
PAUSE

隐藏两个ping的命令和输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8980998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档