这是一个非常具体的问题,但我会将其分解。
这是Bug.js
,它有条件地删除了一个目录并重新创建它(有效地将其创建为空):
var fso = new ActiveXObject("Scripting.FileSystemObject");
DIROutputFull = "C:\\Test"
if(fso.FolderExists(DIROutputFull)) fso.DeleteFolder(DIROutputFull);
fso.CreateFolder(DIROutputFull);
Bug.js
的运行方式与cscript.exe Bug.js
类似,它通常有效 - 除非C:\Test
预先存在且我在C:\Test
打开了一个Windows资源管理器窗口。这是预期的,因为有人可能会认为删除该目录可能会失败。相比之下,重新创建它是失败的。
所以这是事件的顺序:
cscript.exe Bug.js
cscript.exe Bug.js
cscript.exe Bug.js
[...]
cscript.exe Bug.js
start C:\Test
cscript.exe Bug.js
cscript.exe Bug.js
这是输出:
[...]
C:\>cscript.exe Bug.js
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.
C:\>start C:\Test
C:\>cscript.exe Bug.js
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.
C:\Bug.js(4, 1) Microsoft JScript runtime error: Permission denied
C:\>cscript.exe Bug.js
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.
注意第4行拒绝权限,而不是3:C:\Test
实际上已删除,但未重新创建。
为什么?另请注意,这个极小的用例正是我能够重现的。我经常遇到这个问题比我想要的更多,并且我使用的是我愿意修改的脚本,因为它经常从外部来源更新。
有关我的环境的一些信息:
C:\>ver
Microsoft Windows [Version 10.0.16299.309]
C:\>cscript.exe /?
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.
还有什么相关的?