In `:set`: you must write `\ ` for spaces. See `:help option-backslash` (also from `:help :set` and scrolling).

```
							*option-backslash*
To include white space in a string option value it has to be preceded with a
backslash.  To include a backslash you have to use two.  Effectively this
means that the number of backslashes in an option value is halved (rounded
down).
In options 'path', 'cdpath', and 'tags', spaces have to be preceded with three
backslashes instead for compatibility with version 3.0 where the options can
be separated by either commas or spaces.
Comma-separated options like 'backupdir' and 'tags' will also require commas
to be escaped with two backslashes, whereas this is not needed for
non-comma-separated ones like 'makeprg'.
When setting options using |:let| and |literal-string|, you need to use one
fewer layer of backslash.
A few examples: >
   :set makeprg=make\ file	    results in "make file"
   :let &makeprg='make file'	    (same as above)
   :set makeprg=make\\\ file	    results in "make\ file"
   :set tags=tags\ /usr/tags	    results in "tags" and "/usr/tags"
   :set tags=tags\\\ file	    results in "tags file"
   :let &tags='tags\ file'	    (same as above)

   :set makeprg=make,file	    results in "make,file"
   :set makeprg=make\\,file	    results in "make\,file"
   :set tags=tags,file		    results in "tags" and "file"
   :set tags=tags\\,file	    results in "tags,file"
   :let &tags='tags\,file'	    (same as above)
```

For `'path'` specifically, there's an extra caveat :
```
<	- Spaces can also be used to separate directory names (for backwards
	  compatibility with version 3.0).  To have a space in a directory
	  name, precede it with an extra backslash, and escape the space: >
		:set path=.,/dir/with\\\ space
```

You can also use `&`-notation (documented at `:help let-&`):

```
:let &{option-name} = {expr1}			*:let-option* *:let-&*
			Set option {option-name} to the result of the
			expression {expr1}.  A String or Number value is
			always converted to the type of the option.
			For an option local to a window or buffer the effect
			is just like using the |:set| command: both the local
			value and the global value are changed.
			Example: >
				:let &path = &path .. ',/usr/local/include'
<			This also works for terminal codes in the form t_xx.
			But only for alphanumerical names.  Example: >
				:let &t_k1 = "\<Esc>[234;"
<			When the code does not exist yet it will be created as
			a terminal key code, there is no error.
```

So the example would be written in one of these two ways:
```
set path=/c/Program\\\ Files/exampledir
let &path = '/c/Program\ Files/exampledir'
```

With neovim's Lua, you could write
```lua
vim.opt.path = '/c/Program Files/exampledir'
```

Finally, [the question "How do I navigate to topics in Vim's documentation?"](https://vi.stackexchange.com/q/2136/10604) provides a number of tips for finding out how to do something in Vim.