@echo off
set "path=C:\Program Files (x86)\Microsoft\Temp\file.txt"
for /f "tokens=2 delims=\" %%A in ("%path%") do (set "first_folder=%%A")
echo First folder: %first_folder%
Оно работает, только делает немного не то что вам нужно - выдает последнюю папку, а не первую.
Но таким способом (через модификаторы) можно получить любой каталог в пути, рекурсивно раскручивая путь, только вместо цикла в этом случае надо использовать процедуры - для аргументов процедур так же можно использовать модификаторы. Примерно так:
@echo off
setlocal enabledelayedexpansion
:: Путь передается первым параметром скрипта
set "path=%~1"
call:GetPathPart "%path%"
goto:eof
:: Рекурсивная процедура, выводящая на экран все имена в переданном в первом параметре процедуры пути
:GetPathPart
if "%~1" equ "" exit /b 0
if "%~1" equ "\" exit /b 0
:: извлекаем имя файла (последнюю часть пути) и выводим ее на экран
set "getfile=%~nx1"
echo %getfile%
:: убираем имя диска и имя файла
set "tmpath=%~p1"
:: убираем последний слэш из пути, оставшийся после предыдущей операции
if "%tmpath:~-1%" equ "\" set "tmpath=%tmpath:~0,-1%"
:: рекурсивно вызываем себя же, с обновленным аргументом
call:GetPathPart "%tmpath%"
exit /b 0
Этот код то же делает не то, что вам нужно - он выводит все составляющие части пути, кроме имени диска.
Справка по модификатором содержится: for /?
Справка по модификаторам для выделения подстрок и т.п.: set /?