Skip to content

[Bug] health_check.bat creates a stray empty directory (e.g. C:\Program) when the install path contains a space #18177

Description

@wallner-avat

Search before asking

  • I searched in the issues and found nothing similar.

Version

Reproduced on 2.0.8 and current master (identical code). Present since the tool was introduced (#12325); not addressed by #12435 (launch scripts) or #12450 (permission-detection logic).

Environment:

  • OS: Windows (reproduces wherever the install path contains a space)
  • IoTDB: 2.0.8 and master

Describe the bug and provide the minimal reproduce step

On Windows, if IoTDB is located under a path that contains a space (e.g. C:\Program Files\iotdb), the health-check tool's Installation Environment(Directory Access) check splits directory paths at the space. It:

  1. creates a stray empty directory such as C:\Program, and
  2. prints garbled results - e.g. "C:\Program" has write permission followed by "Files\...\ext\pipe" has write permission - instead of one line for the real directory.

To reproduce:

  1. Unzip/install IoTDB into a path containing a space, e.g. C:\Program Files\iotdb (or C:\test dir\iotdb).
  2. Run tools\windows\ops\health_check.bat -o local.
  3. Observe a stray empty C:\Program directory, and split/garbled lines in the Directory Access section.

Any configured directory under the spaced install path triggers it; the ext/* dirs (pipe_lib_dir / udf_lib_dir / trigger_lib_dir) hit it by default because they resolve to %IOTDB_HOME%\ext\....

Affected file: scripts/tools/windows/ops/health_check.bat, routine :local_dirs_check.

Root cause:

:local_dirs_check joins the directory variables into spacedirs with spaces and iterates with for %%a in (%spacedirs%). The for ... in (set) form tokenizes on spaces (and ,/;), so a path containing a space is split into two
tokens. The inner for %%b/%%c loops already preserve spaces for the ;/, multi-dir separators via the "!var:;=" "!" technique, but the outer space-join defeats that. Separately, %%c (from for %%c in ("...")) still carries its
surrounding quotes, so mkdir "%%c" expands to mkdir ""C:\Program Files\..."" - a doubly-quoted path the argument parser re-splits.

What did you expect to see?

Each configured directory is checked as a single path; no stray directory is created; the output has one clean line per directory.

What did you see instead?

The tool splits directory paths at the space and creates a stray directory.

Anything else?

The docs recommend a space-free install path, but the tool shouldn't create stray directories or emit corrupt output when that guidance isn't met - especially since Windows users frequently install under C:\Program Files. A minimal fix is
available (see PR).

Are you willing to submit a PR?

  • I'm willing to submit a PR!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions