Consider this FOR loop in a Windows script package:
D:\MiLu\Dev\C++\temp :: type string.bat @ECHO OFF FOR %%a IN (%*) DO ECHO %%a
He drops all arguments one by one. Really?
D:\MiLu\Dev\C++\temp :: string.bat foo.obj bar.obj CPPFLAGS=/EHsc foo.obj bar.obj CPPFLAGS /EHsc
It separates command line arguments not only into spaces (good), but also by = (not good). How can I prevent this?
What I want to achieve is simple: a wrapper around NMAKE.exe that points /nologo to nmake, and also - and this is a problem - to the compiler via the CFLAGS and CPPFLAGS environment variables, at the same time including any settings for CFLAGS and CPPFLAGS supplied on the command line.
In other words, I want the script to add /nologo to the command line input for CFLAGS and CPPFLAGS, even if they are not. Always /nologo ! Do not annoy me with your logo, friend compiler!
Update
Here's what I thought up based on Mike's answer:
@ECHO OFF SETLOCAL SETLOCAL ENABLEDELAYEDEXPANSION FOR %%a IN (%*) DO ( SET var1=%%a ECHO %%a - !var1! - !var1:~0,1! IF "!var1:~0,1!" EQU "/" ( ECHO gefunden: %%a !var1! ) )
Going to continue tomorrow ...
Update 2
Well, considering that tomorrow is already here, I could continue as well ... so proudly it seemed to be a working solution. Feel free to comment on how to improve it.
@ECHO OFF SETLOCAL SETLOCAL ENABLEDELAYEDEXPANSION SET files= SET CFLAGS=/nologo %CFLAGS% SET CPPFLAGS=/nologo %CPPFLAGS% SET state=normal FOR %%a IN (%*) DO ( SET curarg=%%a REM ECHO %%a - !curarg! - !curarg:~0,1! IF /I "%%a" EQU "CFLAGS" ( SET state=expecting_cflags ) ELSE IF /I "%%a" EQU "CPPFLAGS" ( SET state=expecting_cppflags ) ELSE ( IF "!curarg:~0,1!" EQU "/" ( REM ECHO gefunden: %%a !curarg! IF "!state!" EQU "expecting_cflags" ( REM ECHO expecting_cflags SET CFLAGS=!CFLAGS! !curarg! ) ELSE IF "!state!" EQU "expecting_cppflags" ( REM ECHO expecting_cppflags SET CPPFLAGS=!CPPFLAGS! !curarg! ) ELSE ( ECHO Logikfehler >&2 ) ) ELSE ( SET files=!files! !curarg! ) SET state=normal ) ) ECHO Dateien: !files! >&2 ECHO CFLAGS: !CFLAGS! >&2 ECHO CPPFLAGS: !CPPFLAGS! >&2 :: ECHO ON nmake /nologo %files% CFLAGS="%CFLAGS%" CPPFLAGS="%CPPFLAGS%" ENDLOCAL