为什么cmd命令中顺序的改变会产生不同的结果



我是使用cmd和批处理脚本的新手。以下是我试图对.bat文件执行的操作

  1. 转到文件夹
  2. 在文件资源管理器中打开该文件夹
  3. 在vscode中打开该文件夹
  4. 启动Firefox浏览器

这里的顺序无关紧要。按任何顺序完成这些任务都可以

以下是我最初编写的命令

cd/
E:
cd folder1/folder2/folder3
code .
start .
start firefox

但有了这些命令,我得到的结果是

  1. 只有vscode是从我想用vscode打开的文件夹开始的
  2. 文件资源管理器和Firefox未启动
  3. cmd.exe继续运行。但它似乎只执行了高达的代码命令
  4. 当我关闭vscode时,cmd.exe也会随之关闭

然后我更改了命令的顺序,如下所示

cd/
E:
cd folder1/folder2/folder3
start .
start firefox
code .

这一次一切如预期。我查阅了start命令的文档,但没有找到任何关于start的内容(或者可能我不理解(命令
有人能解释一下为什么当我更改命令序列时结果发生了变化吗?

如注释中所述,code实际上是一个批处理文件code.cmd

如果VSCode安装程序向%PATH%添加了一个位置,请查看该位置,您应该会在bin目录中看到code.cmd

从另一个批处理文件运行批处理文件时,如果希望控制权在完成后传递回初始脚本,则需要使用call命令运行它。

@CD /D "E:folder1folder2folder3" 2>NUL || Exit /B
@Call "%ProgramFiles%Microsoft VS Codebincode.cmd" .
@Start "" "%SystemRoot%explorer.exe" .
@Start "" "%ProgramFiles%Mozilla Firefoxfirefox.exe"

如果你不想要健壮的代码,并且希望假设文件扩展名和环境设置,上面的内容可以简化为:

@CD /D E:folder1folder2folder3
@Call code .
@Start explorer .
@Start firefox

最新更新