检查目录在BAT脚本中是否可写的最佳方法是什么?

bat*_*azy 7 windows permissions batch-file

如何检查执行用户是否可以从批处理脚本写入目录?

这是我到目前为止所尝试的:

> cd "%PROGRAMFILES%"

> echo. > foo
Access is denied.
> echo %ERRORLEVEL%
0
Run Code Online (Sandbox Code Playgroud)

好的,那怎么样......

> copy NUL > foo
Access is denied.
> echo %ERRORLEVEL%
0
Run Code Online (Sandbox Code Playgroud)

不是吗?那怎么样......

> copy foo bar
Access is denied.
        0 file(s) copied.
> echo %ERRORLEVEL%
1
Run Code Online (Sandbox Code Playgroud)

这有效,但如果文件不存在则会中断.

我已经阅读了一些关于内部命令但没有设置ERRORLEVEL的内容,但copy显然在最后一种情况下这样做了.

SLa*_*aks 3

您可以写入copy %0 foo复制批处理文件本身。
这将永远存在。

请记住随后删除该文件,并确保不会用该名称覆盖现有文件。

应该有更好的方法来做到这一点,但我不知道。

编辑:更好的是,尝试一下mkdir foo
如果批处理文件在网络上运行(或者它非常大),这可能会更快。