如何根据参数安全地编写目录删除代码?

How to safely code directory delete based on parameter?

我有一个编排多个进程的脚本,所有进程都在参数文件中定义的位置创建日志(即与脚本分开)。在 运行 进程之前,脚本会清空日志位置,例如

rem LOGLOC is loaded from a parameter file
Del /F /Q /S %LOGLOC%\*.*

显然非常危险。如果出于任何原因错误地定义了 LOGLOC,这可能是灾难性的。我修改了脚本以增加一些安全性...

if "%LOGLOC%" equ "" (
    ECHO FATAL ERROR: LOGLOC not defined
    exit /b 1
)
Del /F /Q /S %LOGLOC%\*.*

...但不考虑 LOGLOC 可能被意外定义为 '.''..'.

的情况

在以潜在有害的方式使用参数之前,是否有更好的检查模式?

编辑:我正在按照 Fejese 的建议添加以下验证规则。

  1. 检查它的长度至少为 4 个字符,例如C:\L
  2. 验证 A-Z 中的字符 1
  3. 验证字符 2,3 = :\
  4. 验证路径是否存在并且是一个目录

如果我能弄清楚这些,我会 post 结果,但感谢 Fejese 为我指明了正确的方向...

除非您设置一些规则,否则脚本无法判断获取的参数是否安全。

  • 您可以在脚本中硬编码一个必须匹配的前缀。
  • 例如,您可以将删除模式限制为仅删除日志文件。