Хотя это старый вопрос, есть способ сделать то, что задают;он просто запутан, как и все в пакетных файлах!
Нужно использовать комбинированные механизмы того, что делает импорт переменных среды и что препроцессор может вызывать команды, а затем рекурсивно вызывать Makefile.Предполагается, что Makefile называется Makefile (без расширения, которое является значением по умолчанию).
!IFNDEF MAKE
MAKE=NMAKE
!ENDIF
!IFNDEF SHELLVALUE
! IF [echo off && FOR /F "usebackq" %i IN (`hostname`) DO SET SHELLVALUE=%i && $(MAKE) /$(MAKEFLAGS) /nologo /f $(MAKEDIR)\Makefile && exit /b ] == 0
! MESSAGE Make completed
! ELSE
! ERROR Error in nmake
! ENDIF
!ELSE
# $(SHELLVALUE) now contains the string returned from the command USERNAME
!MESSAGE Shellvalue is $(SHELLVALUE)
# Put the parts of the makefile that depend on SHELLVALUE here
!ENDIF
#
# To be a valid makefile it must have some rules to perform
all:
@echo;$(SHELLVALUE)
Да, я знаю, что это ужасно, но он демонстрирует, как выполнять технику, что может быть сделано с любымкоманда оболочки, а не просто hostname
.