【问题标题】:Why is my 1 line command in cmd not working?为什么我在 cmd 中的 1 行命令不起作用?
【发布时间】:2021-03-05 03:18:39
【问题描述】:

如果文件夹bin 尚不存在,我有此命令自动创建它:

if not exist bin mkdir bin

我有另一个命令编译一个 C 文件并将它放在 bin 文件夹中:

gcc hello_world.c -o bin/hello_world.exe

当我像这样将命令连接在一起时:

if not exist bin mkdir bin && gcc hello_world.c -o bin/hello_world.exe

如果bin 文件夹不存在,它可以正常工作。但是当 bin 文件夹已经存在时, 第二个命令没有运行。

为什么以及如何发生这种情况?

编辑:我试过只使用 1 个&,但结果还是一样。

【问题讨论】:

  • 不需要if。如果文件夹已经存在,mkdir 将不会执行任何操作(设置错误级别除外)。使用&(“然后做”)而不是&&(“如果成功,那么做”)。 Mkdir“失败”创建该文件夹,如果它已经存在。 mkdir bin & gcc hello_world.c -o bin/hello_world.exe 应该适合你。
  • 您希望gcc 的执行独立于if exist 的结果吗?如果是这样,您需要像这样放置括号:(if not exist bin mkdir bin) & gcc hello_world.c -o bin/hello_world.exe...
  • 使用mkdir bin 2>nul & gcc.exe hello_world.c -o bin/hello_world.exe时根本不需要IF条件。通过将其从句柄 STDERR 重定向到设备 NUL 来抑制 mkdir 在目录 bin 上已经存在的错误消息输出。接下来gcc.exe 独立于创建子目录bin 的成功或失败执行。如果你想使用 IF 条件,我建议使用mkdir bin 2>nul & if exist bin gcc.exe hello_world.c -o bin/hello_world.exe,它首先创建目录,然后检查目录是否存在,在这种情况下运行gcc.exe

标签: shell gcc cmd terminal directory


【解决方案1】:
C:\WINDOWS\system32>(if not exist bin mkdir bin) & echo %errorlevel%
1

C:\WINDOWS\system32>(if not exist bin mkdir bin) & echo %errorlevel%
0

&& 表示仅当%errorlevel% 为0 时才运行下一条命令。更改为&

https://winsourcecode.blogspot.com/2019/12/command-prompt-cheat-sheet.html

【讨论】:

  • 恐怕您的解决方案没有解决我的问题。结果还是一样。
  • 您对&& 的看法是正确的,但您的代码是错误的,因为它缺少delayed expansion 用于ErrorLevel...
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多