我想在Windows CMD控制台中运行两个命令。

在Linux中我会这样做

touch thisfile ; ls -lstrh

在Windows上是怎么做的呢?


当前回答

是的,有。&。

如果命令1没有失败,&&将在命令1完成时执行命令2。

无论如何都会执行。

其他回答

当您尝试在一行中使用或操作变量时,请注意它们的内容!例如,如下所示的变量

PATH=C:\程序文件(x86)\某处;“C: \企业\酷工具”;% USERPROFILE % \ AppData \当地\ \ WindowsApps微软;

可能会导致很多无法处理的麻烦,如果你使用它作为%PATH%

右括号终止组语句 双引号不允许使用%PATH%来处理圆括号问题 像%USERPROFILE%这样的引用变量将包含什么?

So, I was trying to enable the specific task of running RegAsm (register assembly) from a context menu. The issue I had was that the result would flash up and go away before I could read it. So I tried piping to Pause, which does not work when the command fails (as mentioned here Pause command not working in .bat script and here Batch file command PAUSE does not work). So I tried cmd /k but that leaves the window open for more commands (I just want to read the result). So I added a pause followed by exit to the chain, resulting in the following:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" &暂停&退出

这就像一个咒语——RegAsm在文件上运行并显示其结果,然后显示“按任意键继续…”提示符,然后当按下一个键时命令提示符窗口关闭。

P.S.对于其他可能感兴趣的人,你可以使用以下.reg文件条目来添加一个dllfile关联到.dll文件,然后再添加一个RegAsm命令扩展名(注意转义的引号和反斜杠):

[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"

[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

现在我有了一个很好的右击菜单来注册程序集。

当在同一行上运行多个命令时,可以使用许多处理符号,在某些情况下可能导致处理重定向,在其他情况下可能改变输出,或者导致失败。一个重要的例子是将操作变量的命令放在同一行。

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

正如您在上面的例子中看到的,当使用变量的命令被放在同一行时,您必须使用延迟展开来更新变量值。如果你的变量被索引了,使用CALL命令和%%修饰符来更新它在同一行的值:

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5

在windows中使用&符号可在一行中使用命令

C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook

比如Linux 我们使用,

touch thisfile ; ls -lstrh

自2000年以来,所有的微软操作系统都是这样的,直到今天仍然很好:

dir & echo foo

如果你希望第二个命令只在第一个命令成功退出时执行:

dir && echo foo

在一行上执行多个命令的单个&(&)语法可以追溯到Windows XP、Windows 2000和一些较早的NT版本。(根据这里的一个评论,至少4.0。)

关于这一点,您还可以在滚动本页面时找到其他一些观点。

下面是一些历史数据,供那些觉得有教育意义的人参考。

在此之前,&&语法只是shell替代品4DOS的一个特性,之后该特性被添加到微软命令解释器中。

在Windows 95、98和ME中,你可以使用管道字符:

dir | echo foo

在MS-DOS 5.0及以后版本中,通过一些较早的Windows和NT版本的命令解释器,(未记录的)命令分隔符是字符20 (Ctrl+T),这里我将用^T表示。

dir ^T echo foo