Windows cmd中的虚拟命令

24
在Linux中,我们有一个makefile:
$(foreach A,a b,echo $(A) &&) true

它能正常工作并输出

a
b

现在我们想要将它移植到 Windows 平台。我找到的最短的在 Windows 上什么都不做的命令是:

if 0==1 0

那么Makefile示例将如下所示

$(foreach A,a b,echo $(A) &&) if 0==1 0

在Windows的框中是否有任何虚假命令(真正什么都不做的)?或者任何好的技巧?


根据make如何运行shell命令,“exit”可能会很好地工作。 - Harry Johnston
在执行 exit 命令后,make 将终止执行。 - artyom.stv
奇怪。它一定是在解析命令本身,或更可能将它们作为输入传递给cmd.exe的持久副本。谢谢你让我知道。 - Harry Johnston
“break” 可能符合您的描述(请参见 “break /?”)。另一方面,您的代码示例与“cmd”或“batch”无关,因此它可能不是任何语言中的内容。 - Stephan
5个回答

29

rem命令没有任何功能。


3
我不会称之为命令,但它确实没有任何作用。 - Lance Roberts
你是对的,行末的 rem 不会产生任何影响。谢谢! - artyom.stv
3
如果在子shell中使用 "rem" 命令,会导致该行代码不运行,而替换成 "echo" 命令则不可行,因为它总是会输出一些内容。您需要找到一个好的替代命令来修复这个问题。 - stu
在Linux中,它们在子shell中运行,在Windows中除非您指定(),否则它们不会运行。虽然我不是Windows专家。 - stu
"CALL REM" 也会将 ERRORLEVEL 设置为 "0"。 - it3xl
+stu,echo 命令并不总是会输出内容。你可以尝试使用以下命令:echo( echo[ echo] echo. echo; echo: echo/ echo\ echo""""""""。但如果这些命令单独在一行中使用,它们都不会输出任何内容(是的,甚至没有“ECHO is ON”或其他任何东西)。 - Brent Rittenhouse

23
< p >没有任何参数的call命令不会产生任何效果,也没有像rem一样的附带效果。

例子:

echo Wait for it...
call
echo Nothing happened!

调用是用来调用某些东西的。你在请求什么? - NoNo
1
@NoNo 我的意思是 call 没有参数 时是一个空操作。这回答了原来的问题“_在 Windows 中是否有任何虚拟命令(真正不执行任何操作)?或者有什么好的技巧吗?_” - Ricardo Stuven
在某些情况下,这并不起作用。我有一个组,如果我不使用echo,那么由于某种原因它会掉到下一个组中。我尝试了call,但它仍然掉了下去。我正在尝试找到像echo一样工作但不打印的东西。(echo off可以工作!) - AbstractDissonance
5
一个空的调用似乎也会将错误级别设置为1。有些人可能认为这是一种功能。 - Paul Houle
@PaulHoule 感谢您指出这一点。如果您希望在命令结束时将 errorlevel 设置为 0,则需要使用不同的解决方案。 - aaaantoine

21

旧帖新答案。

当我在Windows中什么都不想做时(这种情况经常发生),我会使用 cd. 命令。因为 "将目录更改为其本身" 在我看来没有任何副作用。


@jeb 任何命令都会设置错误级别,以指示其是否成功。在Linux上,truefalse都可以实现这一点。 - jpaugh
3
并非所有命令都会改变错误级别,例如 breakecho 命令不会改变错误级别。有关错误级别的更多信息,请参阅 dbenham 关于错误级别的文章 - jeb
1
这是一个跨平台的解决方案。很棒! - lav

5
没有一个最短的虚拟命令是通用的答案,因为有几个不同的目的(上下文)可能会导致不同的选择。从最好到最差列出如下。 @ 在长度和无所作为方面表现出色。在命令行末尾使用效果很好。 rem 很棒,在 command.com 时代它曾经是一个命令,因此即使在输入/输出重定向时也可以使用。今天(在 cmd.exe 中)它开始成为注释,因此只能在命令行末尾使用;任何重定向也将被注释掉。 echo. 即使在输入/输出重定向时也可以使用。那个点不会被打印出来,echo 状态也不会改变。如果在命令批处理的开头使用,如果您不想将虚拟命令本身回显到标准输出,则可能需要拼写为 @echo.;但这并不特别适用于 echo 命令。

cd. 是 Linux 中 true 的对应物。与 OP 相对立,它实际上执行了某些特定操作:将 ERRORLEVEL 设置为 0。它可以与重定向一起使用。

call 是 Linux 中 false 的对应物。该命令认为它值得告诉您要调用什么,但如果您没有提到任何内容,则让您无需任何错误消息而过去,并将 ERRORLEVEL 设置为正值。它可以与重定向一起使用。

(此摘要基于三个现有答案和另一个站点上的 this answer 回答。尝试一个老式的规范化回答。)


4

break 命令是 Windows cmd 中任何想要无操作的命令所需的。自Windows 98以来(或者甚至更早之前),它就没有做过任何事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接