在命令行任务VSTS中使用IF EXIST

时间:2017-11-24 08:17:36

标签: command-line azure-devops azure-pipelines-build-task

问题

我想在VSTS中的发布任务中运行IF EXIST命令,但我不确定如何拆分代码以运行命令,文档并不清楚实际上是什么是一个论点。

我想要运行的行是

IF EXIST C:\Users\user\Documents\folder_name ( rmdir /s folder_to_delete  /Q )

如果我在命令行中运行它运行得很好,但我无法将其转换为VSTS命令行工具字段。

我尝试了什么

# In Tool field:
IF EXIST 'C:\Users\user\Documents\folder_name' ( rmdir /s 'folder_to_delete'  /Q )

# In tool field:
IF EXIST 'C:\Users\user\Documents\folder_name' ( rmdir /s 'C:\path\to\folder_to_delete'  /Q )

# In tool field:
IF EXIST C:\Users\user\Documents\folder_name rmdir /s 'folder_to_delete'  /Q

# In tool field:
IF EXIST C:\Users\user\Documents\folder_name rmdir folder_to_delete

# In tool field:
IF EXIST C:\Users\user\Documents\folder_name ( rmdir folder_to_delete)
# In Arguments field:
/s /Q

# In tool field:
IF EXIST
# In Arguments field:
C:\Users\user\Documents\folder_name rmdir folder_to_delete

使用'" dirct或相对路径进行迭代时,这些都不起作用。

错误消息

我得到的错误消息:

  

该命令的语法不正确。

1 个答案:

答案 0 :(得分:0)

TL:DR;

解决方案是

# In Tool field:
IF
# In Arguments field:
EXIST C:\Users\user\Documents\folder_name ( rmdir /s folder_to_delete  /Q )

移植

通过查看widows command documentation,我们可以看到唯一的命令是IF。其他一切都是命令。

EXISTIF的选项命令,其他示例可以是DEFINEDERRORLEVEL,两者都可以与条件NOT结合使用。

将uri周围的'放到文件夹是可选的,除非你在uri中有空格,然后它们是一个转义空格的选项。

由于arguments字段是一个行字段,因此您不需要使用括号;它们是一种语法,允许您的命令行接受多行参数。作为替代方案,您可以使用&示例:

# In Tool field:
IF
# In Arguments field:
EXIST C:\Users\user\Documents\folder_name echo removing dir! & rmdir /s folder_to_delete  /Q

语法仍允许您使用括号,但不是必需的。但是,如果您希望将IFELSE合并,则确实需要它们:

IF NOT EXIST folder (mkdir folder) ELSE (echo Folder exists!)