背景:我有一個後期構建過程,將文件複製到另一個位置。它看起來像這樣:有沒有辦法在DOS腳本中檢查文件的可用性?
copy $(TargetPath) "%programfiles%\mypath"
如果另一個進程正在使用該文件,此步驟可能會失敗。這一步並不重要,所以如果可能的話,我想忽略失敗。爲此,我需要腳本來檢查以確定文件是否被另一個進程使用。
問:有沒有一種方法可以測試DOS腳本中的文件以確定它是否被另一個進程使用?
背景:我有一個後期構建過程,將文件複製到另一個位置。它看起來像這樣:有沒有辦法在DOS腳本中檢查文件的可用性?
copy $(TargetPath) "%programfiles%\mypath"
如果另一個進程正在使用該文件,此步驟可能會失敗。這一步並不重要,所以如果可能的話,我想忽略失敗。爲此,我需要腳本來檢查以確定文件是否被另一個進程使用。
問:有沒有一種方法可以測試DOS腳本中的文件以確定它是否被另一個進程使用?
好吧,所以我需要在執行復制後檢查錯誤級別,以便我可以正確處理退出。解決方案如下:
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
您可以看到文件是否存在,然後重命名.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"