l script @Batch no se ejecuta, aunque su código se ejecuta en CMD

Estaba buscando una manera fácil de obtener la información de volúmenes del sistema en GB (lote), así que obtuve esto:

for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo(& @cscript //nologo %temp%\tmp.vbs >> c:\test\test2.txt | type C:\test\test2.txt

Funciona bien si solo lo copio y lo pego en el CMD pero si lo ejecuto desde un archivo .bat simplemente no hace nada.

¿Qué podría estar haciendo mal?

PD: No puedo usar PowerShell, lo necesito en lote.