Проблема может заключаться в том, что вы не используете кавычки должным образом. Попробуйте это
Dim WshShell, oExec,g,h
h= Chr(34) & "D:\newfolder" & Chr(34)
g="xcopy " & h & " " & Chr(34) & "D:\y\" & Chr(34) & " /E"
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec(g)
Если в любом из путей есть пробелы, путь должен содержаться в кавычках, Chr (34) - это символ кавычки, поэтому, вставляя их в начало и конец пути, он оборачивает пути в кавычки.
Допустим, исходный путь - C: \ Documents and Settings. Если вы передадите это xcopy, он будет думать, что источником является «C: \ Documents», местом назначения будут «и», а аргументами будут «Настройки \». Вот почему ваши пути должны быть заключены в кавычки, если вы передаете xcopy «C: \ Documents and Settings» «C: \» / e, то он знает, что источником является «C: \ Documents and Settings», местом назначения является «C». : \ 'и аргументы' /e'.