Esme Povirk (@madewokherd) commented about dlls/scrrun/filesystem.c:
- lstrcatW(dst_path, filename); - TRACE("move %s to %s\n", debugstr_w(source), debugstr_w(dst_path)); - return MoveFileW(source, dst_path) ? S_OK : create_error(GetLastError()); + if (destination[len-1] == '\\' || destination[len-1] == '/') + separator = TRUE; + + if (!wildcard && !separator) { + return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); } - return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); + + f = FindFirstFileW(source, &ffd); + if(f == INVALID_HANDLE_VALUE) + return create_error(GetLastError()); + + do { This loop doesn't seem to check for non-directories. I'm curious what happens if some non-directories match the wildcard.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/391#note_4463