Batch file 如何批量使用空ELSE

Batch file 如何批量使用空ELSE,batch-file,cmd,Batch File,Cmd,在启动React原生项目之前,我创建了一个正在使用的批处理文件。在生成项目之前,我必须从项目文件夹中删除文件夹“build”,否则会导致问题。所以我写了一个代码来检查文件夹是否存在。如果为True,请删除文件夹并继续代码。现在,我希望如果没有文件夹(returnfalse),代码将在if语句之后继续。但是CMD窗口只是在屏幕上闪烁,什么也没发生 我尝试添加ELSE(),但得到了相同的结果 IF EXIST "C:\Users\+name+\git\actual\android\app\build

在启动React原生项目之前,我创建了一个正在使用的批处理文件。在生成项目之前,我必须从项目文件夹中删除文件夹“build”,否则会导致问题。所以我写了一个代码来检查文件夹是否存在。如果为True,请删除文件夹并继续代码。现在,我希望如果没有文件夹(returnfalse),代码将在if语句之后继续。但是CMD窗口只是在屏幕上闪烁,什么也没发生

我尝试添加
ELSE()
,但得到了相同的结果

IF EXIST "C:\Users\+name+\git\actual\android\app\build" 
(@RD /S /Q "C:\Users\+name+\git\actual\android\app\build") 
&& cd C:\Users\+name+\git\actual && npm install && react-native start --reset-cache
我想:如果有文件夹,然后删除它继续与代码。
如果没有文件夹,则只需继续执行
If
/
ELSE
语句之后的代码。

以下示例中的If条件仅在文件夹存在并继续时才会运行
rd
。但如果目录不存在,将跳过
rd
命令

set "mypath=C:\Users\+name+\git\actual\android\app\build"
if exist  %mypath" @RD /S /Q "%mypath%"
cd /d "C:\Users\+name+\git\actual"
call npm install && react-native start --reset-cache
但是,在这种情况下,您不需要调用另一个进程,因为这样做完全符合您的要求:

rd /S /Q "C:\Users\+name+\git\actual\android\app\build">nul 2>&1
cd /d "C:\Users\+name+\git\actual"
call npm install && react-native start --reset-cache
如果文件夹不存在,它只会返回一个错误,我们只需将该错误重定向到
nul

旁注如果这是针对您自己的用户,您可以使用预定义的环境变量
%userprofile%
替换整个
C:\Users\+name+
部分,这样就可以将脚本分发给其他人,而无需更改
用户名


请参阅cmd中的
set userprofile
,或
echo%userprofile%
或只需
set
即可查看所有预定义的环境变量

一个简单的解决方案是:

if not somecondition goto stage2

:stage1
command1
command2

:stage2
realwork1
realwork2

要直接回答您的问题,如果在未满足
if
is条件时没有要执行的特定任务,则不需要包含
Else
语句

由于
npm
react native
都是批处理文件,即
npm.cmd
react native.cmd
,如果希望在完成后将控制返回批处理文件,则应
调用它们。如果您在问题代码中提供了问题,那么您至少需要
npm.cmd
在问题完成后返回。下面的示例使用
Call
进行调用,因此如果批处理文件在该行结束,则可以删除第二个
Call

@CD/D”%UserProfile%\git\actual“2>num | |退出/B 1
@如果存在“android\app\build\”RD/S/Q“android\app\build”
@调用npm安装并调用react native start--reset缓存
如果要将其作为一行运行,也可以这样做:

@CD/D”%UserProfile%\git\actual“2>NUL&&&(RD/S/Q“android\app\build”2>NUL&Call npm安装和响应本机启动--重置缓存)
此版本已删除第二个
调用。


这两个示例都使用了
%UserProfile%
变量来表示当前用户的配置文件,如果您以另一个用户的身份运行此配置文件,您可能希望根据需要替换它。

1。换行太多;这真的是你脚本的代码吗?正如它所写的,它应该全部在一行中。2.将
call
放在
npm
前面,因为它(通常)是一个批处理文件。3.将
cd
替换为
cd/D
4<代码>如果command1和command2有条件地执行这两个命令
(if command1)&command2始终执行第二个命令……您可以添加一个
exit
语句,而不是空的
else
语句,这更适合于类似的情况(我还认为您想要的和控制
if
的内容之间存在差异)@该死的,这样做违背了OP要求的目的。请再次阅读问题,尤其是最后一行。如果
npm
是@aschipfl建议的.bat脚本,那么它需要
CALL
,否则它将永远不会返回。
&&
是否克服了这一点?@lit好吧,我关注的是OP的问题,而不是其他部分,但它在这里并没有真正的区别,npm将在本地启动,只有在完成wiith ERROR LEVEL 0后,它才会继续执行下一个命令。。。但仍将更新。在第二个备选代码中,您不需要if语句。@DodgyCodeException谢谢兄弟,我只是从第一个示例中复制了它,没有再看一次。@lit我不能假定它是用户的pofile。。他可能正在以管理员的身份运行脚本来创建其他配置文件。好吧,这是一个很好的解决方法。。。更简单的方法是
如果存在filename del filename
下一个命令将被启动,因此只需要一行而不是三行。。加上不需要标签。@GerhardBarnard是肯定的,但在“exists”的情况下,这可以扩展到做多种事情。我会把我的意图说清楚的。