I believe you are looking for this:
for /r %i in (*sub_string*) do echo %i
Or if you are using a batch file:
for /r %%i in (*sub_string*) do echo %%i
Here is my directory structure:

Output of running the following command:
for /r %i in (*test*) do echo %i
Is as follows:
C:\Users\czimmerman\Development\CMDTest>for /r %i in (*test*) do echo %i
C:\Users\czimmerman\Development\CMDTest>echo C:\Users\czimmerman\Development\CMD
Test\test1.txt
C:\Users\czimmerman\Development\CMDTest\test1.txt
C:\Users\czimmerman\Development\CMDTest>echo C:\Users\czimmerman\Development\CMD
Test\test2.txt
C:\Users\czimmerman\Development\CMDTest\test2.txt
C:\Users\czimmerman\Development\CMDTest>
Notice there is no notthisone.txt
listed.