如何在Visual Studio的预构建事件命令行中删除文件

64

我试图在Visual Studio中构建项目之前删除$(TargetDir)中的文件。

您如何格式化命令行以解决以下问题?

alt text
7个回答

88
尝试
cd $(TargetDir)
del *.tif

正如jvenema所指出的那样,你的$(TargetDir)正在扩展为包含空格的文件夹名称路径,这破坏了删除命令。


2
我注意到,即使在dirname中没有空格,将其分成“cd”和通配符也会导致工作和破裂之间的差异:/ - Dean Radcliffe
@Eoin,你能告诉我在哪里可以找到这些命令的文档吗?或者你能给我在谷歌上的搜索关键字吗?非常感谢。 - Joe.wang
只是为了澄清,TargetDir 可能是您的 bin 目录。 - Ben Power

32

我最终使用了rd /s /q "$(TargetDir)"来清空目录。据我所知,它正在工作。


这将删除甚至包括子目录在内的所有内容,通过/q选项静默地删除。这意味着“删除目录命令”(rd)永远不会询问是否确认删除。如果存在现有文件,则此方法变得更好,谢谢。 - Davut Gürbüz
1
这将静默地删除构建目标目录 $(TargetDir) 及其内容。当需要时,Visual Studio 会重新创建构建目录。 - George
我也发现这种方法很有用,因为当你要删除文件的目录不存在时,“del”命令会出现相同的错误,这是在你想要从更深层次的构建输出结构中删除所有文件时的一个问题。 - OcularProgrammer

17

尝试在目录周围添加引号。


感谢jvenema:看起来“quote”实际上做了我认为它应该做的事情,但不幸的是我没有使用通配符删除所有图像。不过Eoin的版本起作用了。 - dance2die

14

由于目录路径中有空格,因此必须编写del "$(TargetDir)*.tif"


10

旧问题,但有几点需要注意:

del "$(TargetDir)*.tif" /q

1) /q用于静默操作。否则,del cmd提示“…你确定要删除吗(Y/N)?”,而构建不喜欢这样。

2) 如许多人指出的那样,在目标目录中可能包含空格时,需在targetDir周围使用""。


0

对于 DOTNET Core,您的引号需要进行转义,像这样:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
  <Exec Command="del &quot;$(ProjectDir)wwwroot\_framework\*.*&quot; /q" />
</Target>

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
  <Exec Command="copy &quot;$(ProjectDir)..\Client\bin\Debug\net5.0\wwwroot\_framework\*.*&quot; &quot;$(ProjectDir)wwwroot\_framework\&quot;" />
</Target>

-2

使用 wmic process where name='chromedriver.exe' delete 命令可以删除 chromedriver.exe 进程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接