有没有办法在DOS脚本中检查文件可用性?

时间:2011-06-03 08:12:50

标签: windows dos

背景:我有一个后期构建过程,可以将文件复制到另一个位置。它看起来像这样:

copy $(TargetPath) "%programfiles%\mypath"

如果另一个进程正在使用该文件,则此步骤可能会失败。这一步并不重要,所以如果可能,我想忽略失败。为此,我需要检查脚本以确定该文件是否被另一个进程使用。

问题:有没有办法在DOS脚本中测试文件以确定它是否被其他进程使用?

2 个答案:

答案 0 :(得分:1)

您可以查看文件是否存在,然后重命名.dll / .exe,即使它正在执行。可能也想做.pdb文件。

IF EXIST $(TargetName).deleted del $(TargetName).deleted
IF EXIST $(TargetName).pdb.deleted del $(TargetName).pdb.deleted
IF EXIST "%programfiles%\mypath\$(TargetName)$(TargetExt)" REN "%programfiles%\mypath\$(TargetName)$(TargetExt)" $(TargetName).deleted
IF EXIST "%programfiles%\mypath\$(TargetName)$(TargetExt)" REN "%programfiles%\mypath\$(TargetName)$.pdb" $(TargetName).pdb.deleted
copy $(TargetPath) "%programfiles%\mypath"

答案 1 :(得分:0)

好的,所以我需要在执行复制后检查错误级别,以便我可以正确处理退出。解决方案如下:

copy $(TargetPath) "%programfiles%\mypath"
if errorlevel 1 goto BuildProcessFailed

goto BuildProcessOK
:BuildProcessFailed
echo BUILDPROCESS FAILED FOR PROJECT $(ProjectName)
goto ExitBuildProcess
:BuildProcessOK
echo BUILDPROCESS OK FOR PROJECT $(ProjectName)

:ExitBuildProcess