The character ? is not a regular question mark ?, even though it looks almost identical in many fonts. Windows does not allow the normal question mark character ? in filenames because it is reserved as a wildcard character. So any filename that appears to contain a question mark is actually using a different Unicode character.
That is why your search:
filename:*?
does not behave the way you expect. File Explorer search often treats the visually similar character ? as equivalent to the wildcard ?, rather than as a literal character.
To search for the literal character, use quotes:
filename:"?"
If you want filenames that contain it anywhere in the name, use:
filename:"*?*"
or simply:
*?*
depending on the folder and indexing behavior.
Btw. Explorer’s handling of Unicode punctuation is inconsistent, so these searches may still fail in some locations. PowerShell is much more reliable for exact-character searches:
Get-ChildItem -Recurse | Where-Object { $_.Name.Contains("?") }
That searches recursively for filenames containing that exact Unicode character.
If the above response helps answer your question, remember to "Accept Answer" so that others in the community facing similar issues can easily find the solution. Your contribution is highly appreciated.
hth
Marcin