Ok, also erstens: BATCH IST DER LETZTE MÜLL
Und nun zur Lösung des Problems:
for /R %~1 %%G in (*.*) do (call :foo "%%G")
man muss eine andere funktion aufrufen, denn DIESE BEHINDERTE SPRACHE erlaubt keine Variablendeklaration in einer for-Schleife. Zumindest kann man diese dann nicht mehr abrufen. Warum /R? Keine Ahnung ich hab einfach so lange rumprobiert bis es klappt. Warum %%G? Keine Ahnung, vermutlich weil BATCH SCHE*SSE IST!!! So den Rest meiner Probleme lasse ich jetzt mal weg.
Diese Antwort dient nur dazu, eine Lösung anzubieten, falls jemand durch googlen hierauf stößt.