Glam Prestige Journal

Bright entertainment trends with youth appeal.

Recently I asked a question about how to use a if-else-Check in a batch-file which got solved. Now i tried to Expand on that by using multiple if-else-conditions in my batch-file. When executing it, nothing happens.

To understand what I'm trying to accomplish: I have an .ini-file with 4 different states. I want my batch-script to check every state and perform a task for the respective case. For testing I set a command to just create a folder but when ready it should perform other tasks. But that's not important for my question I think. This is my code so far:

 @echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims==" %%G in ('findstr "lang=" conf.ini') do ( if "%%G"=="deu" ( for /f "tokens=2 delims==" %%G in ('findstr "vers=" conf.ini') do ( if "%%G"=="orig" ( for /f "tokens=2 delims==" %%G in ('findstr "enhancements=" conf.ini') do ( if "%%G"=="0" ( for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do ( if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOff goto :done ) if "%%G"=="1" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOn ) goto :done ) if "%%G"=="1" ( for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do ( if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOff goto :done ) if "%%G"=="1" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOn ) goto :done ) if "%%G"=="rem" ( for /f "tokens=2 delims==" %%G in ('findstr "enhancements=" conf.ini') do ( if "%%G"=="0" ( for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do ( if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOff goto :done ) if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOn ) goto :done ) if "%%G"=="1" ( for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do ( if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOff goto :done ) if "%%G"=="1" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOn ) goto :done ) if "%%G"=="deu" ( for /f "tokens=2 delims==" %%G in ('findstr "vers=" conf.ini') do ( if "%%G"=="orig" ( for /f "tokens=2 delims==" %%G in ('findstr "enhancements=" conf.ini') do ( if "%%G"=="0" ( for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do ( if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOff ) if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOn ) goto :done ) if "%%G"=="1" ( for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do ( if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOff goto :done ) if "%%G"=="1" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOn ) goto :done ) if "%%G"=="rem" ( for /f "tokens=2 delims==" %%G in ('findstr "enhancements=" conf.ini') do ( if "%%G"=="0" ( for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do ( if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOff goto :done ) if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOn ) goto :done ) if "%%G"=="1" ( for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do ( if "%%G"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOff goto :done ) if "%%G"=="1" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOn ) goto :done )
:done
endlocal 

Edit: Since I was recommended in the Comments to show my conf.ini-file:

lang=deu
vers=orig
enhancements=0
modifications=0

The Script should check all four entries and do tasks which are different to each other. For testing reasons it should just create a folder. ifst it should check the language (lang) and continue to go to ger or eng. For both cases it should check the version (vers). After that (again for both cases) it should check enhancements and the same process should be repeated for the last line. Therefore i have 16 possible outcomes

Edit 2: These are the outcomes i expect. For testing it should start a pre-definied bath script:

Case 1
lang=ger
vers=orig
enhancements=0
modifications=0
=> Start case1.bat
Case 2
lang=ger
vers=orig
enhancements=0
modifications=1
=> Start case2.bat
Case 3
lang=ger
vers=orig
enhancements=1
modifications=0
=> Start case3.bat
Case 4
lang=ger
vers=orig
enhancements=1
modifications=1
=> Start case4.bat
Case 5
lang=ger
vers=rem
enhancements=0
modifications=0
=> Start case5.bat
Case 6
lang=ger
vers=rem
enhancements=0
modifications=1
=> CStart case6.bat
Case 7
lang=ger
vers=rem
enhancements=1
modifications=0
=> Start case7.bat
Case 8
lang=eng
vers=rem
enhancements=1
modifications=1
=> Start case8.bat
Case 9
lang=eng
vers=orig
enhancements=0
modifications=0
=> Start case9.bat
Case 10
lang=eng
vers=orig
enhancements=0
modifications=1
=> Start case10.bat
Case 11
lang=eng
vers=orig
enhancements=1
modifications=0
=> Start case11.bat
Case 12
lang=eng
vers=orig
enhancements=1
modifications=1
=> Start case12.bat
Case 13
lang=eng
vers=rem
enhancements=0
modifications=0
=> Start case13.bat
Case 14
lang=eng
vers=rem
enhancements=0
modifications=1
=> Start case14.bat
Case 15
lang=eng
vers=rem
enhancements=1
modifications=0
=> Start case15.bat
Case 16
lang=eng
vers=rem
enhancements=1
modifications=1
=> Start case16.bat
11

3 Answers

Instead of using nested loops It is easier to extract and process the values independent from each other.

@echo on
setlocal enabledelayedexpansion
REM Extract values from the file to individual variables independent from each other.
for /f "tokens=2 delims==" %%G in ('findstr "lang=" conf.ini') do set LNG=%%G
for /f "tokens=2 delims==" %%G in ('findstr "vers=" conf.ini') do set VER=%%G
for /f "tokens=2 delims==" %%G in ('findstr "enhancements=" conf.ini') do set ENH=%%G
for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do set MOD=%%G
REM Derive 4 parts of the directory name from individual values independent from each other.
if "%LNG%"=="deu" set XL=DeutscheSprache
if "%LNG%"=="eng" set XL=EnglischeSprache
if "%VER%"=="orig" set XV=Original
if "%VER%"=="rem" set XV=Remastered
if "%ENH%"=="0" set XE=EnhancementsOff
if "%ENH%"=="1" set XE=EnhancementsOn
if "%MOD%"=="0" set XM=ModificationsOff
if "%MOD%"=="1" set XM=ModificationsOn
REM Create directory name based on the parts defined above.
set DIR=%XL%.%XV%.%XE%.%XM%
REM (Using "echo mkdir" instead of "mkdir for testing only.)
echo mkdir %DIR%
REM Other possibilities to answer the comment about running multiple commands instead of a single "set" command.
REM Depending on your requirements you can also run multiple commands
REM or check combinations of values using a single "if" statement.
REM Example:
if "%LNG%.%VER%.%ENH%.%MOD%"=="deu.orig.0.0" ( echo This is case DeutscheSprache.Original.EnhancementsOff.modificationsOff echo foo echo bar
)
if "%LNG%.%VER%.%ENH%.%MOD%"=="deu.orig.0.1" ( echo This is case DeutscheSprache.Original.EnhancementsOff.modificationsOn echo bar echo baz
)
REM etc...
endlocal

This script does not handle errors if the expected patterns are not found or if the configuration contains unexpected values.

4
  • You can do this without if()else() conditions by using Findstr with operators && ||:
@echo off
setlocal enabledelayedexpansion
cd /d "%~dp0" && set "_01=Enhancements,Modifications"
for %%i in (%_01%)do %__AppDir__%Findstr.exe /ibl %%~i=0 <.\conf.ini >nul && ( set "_%%~i=%%~iOff" && %comSpec% /v:on /q /c "set^ "_%%~i=!_%%~i!"") || ( set "_%%~i=%%~iOn". && %comSpec% /v:on /q /c "set^ "_%%~i=!_%%~i!"")
2>nul >con: %__AppDir__%Findstr.exe /ibl "vers=rem" <.\conf.ini >nul && ( set "_dir=Sprache.Remastered.!_Enhancements!.!_Modifications!") || ( set "_dir=Sprache.Original.!_Enhancements!.!_Modifications!"..)
2>nul >con: %__AppDir__%Findstr.exe /ibl "lang=deu" <.\conf.ini >nul && ( 2>nul dir/ad/b .\Deutsche!_dir!\.||>nul mkdir "Deutsche!_dir!") || ( 2>nul dir/ad/b .\Englishe!_dir!\.||>nul mkdir "Englishe!_dir!")
2>con: %__AppDir__%Timeout.exe /t -1|dir/a:d/tc/o-d/b *!_dir!. & endlocal


  • You also can to do this by using if() if else() else() in one for /f loop too:
@echo off
cd /d "%~dp0" && setlocal enabledelayedexpansion
set "_str=vers= lang= enhancements= modifications="
for /f usebackq^tokens^=1*delims^=^= %%a in (`%__AppDir__%Findstr.exe /ibl "!_str!" ^<.\conf.ini
=;`)do if /i "%%~a" == "vers" (if /i "%%~b" == "rem" (set "_sts=Remastered")else set "_sts=Original" )else if /i "%%~a" == "lang" (if /i "%%~b" == "eng" (set "_lng=EnglisheSprache")else set "_lng=DeutscheSprache" )else if /i "%%~a" == "enhancements" (if "%%~b" == "0" (set "_enh=EnhancementsOff")else set "_enh=EnhancementsOn" )else if /i "%%~a" == "modifications" (if "%%~b" == "0" (set "_mod=ModificationsOff")else set "_mod=ModificationsOn")
2>nul mkdir "!_lng!.!_sts!.!_enh!.!_mod!" & endlocal


  • For all Cases.bat:
@echo off
cd /d "%~dp0" && setlocal enabledelayedexpansion
set "_str=vers= lang= enhancements= modifications="
for /f tokens^=1*delims^=^= %%a in ('%__AppDir__%Findstr.exe /ibl "!_str!" ^<.\conf.ini
=;')do if /i "%%~a" == "vers" (if /i "%%~b" == "rem" (set "_sts=Rem")else set "_sts=Orig" )else if /i "%%~a" == "enhancements" (if "%%~b" == "0" (set "_enh=0")else set "_enh=1" )else if /i "%%~a" == "modifications" (if "%%~b" == "0" (set "_mod=0")else set "_mod=1" )else if /i "%%~a" == "lang" (if /i "%%~b" == "eng" (set "_lng=Eng")else set "_lng=Ger")
goto %:^) :: Running: .\GerOrig00.bat | Case 01 :: :: Running: .\GerOrig01.bat | Case 02 :: :: Running: .\GerOrig10.bat | Case 03 :: :: Running: .\GerOrig11.bat | Case 04 :: :: Running: .\GerRem00.bat | Case 05 :: :: Running: .\GerRem01.bat | Case 06 :: :: Running: .\GerRem10.bat | Case 07 :: :: Running: .\EngRem11.bat | Case 08 :: :: Running: .\EngOrig00.bat | Case 09 :: :: Running: .\EngOrig01.bat | Case 10 :: :: Running: .\EngOrig10.bat | Case 11 :: :: Running: .\EngOrig11.bat | Case 12 :: :: Running: .\EngRem00.bat | Case 13 :: :: Running: .\EngRem01.bat | Case 14 :: :: Running: .\EngRem10.bat | Case 15 :: :: Running: .\EngRem11.bat | Case 16 ::
%:^)
%__AppDir__%Findstr.exe /li ".\!_lng!!_sts!!_enh!!_mod!\.bat" <"%~f0"
Call .\!_lng!!_sts!!_enh!!_mod!.bat & endlocal & goto :eOf || exit /b
  • File conf.ini content:
lang=deu
vers=rem
enhancements=0
modifications=1
  • Outputs Results:
 :: Running: .\GerRem01.bat | Case 06 ::


  • For all dir\folder\Case options:
@echo off
cd /d "%~dp0" && setlocal enabledelayedexpansion
set "_str=vers= lang= enhancements= modifications="
for /f usebackq^tokens^=1*delims^=^= %%a in (`%__AppDir__%Findstr.exe /ibl "!_str!" ^<.\conf.ini
=;`)do if /i "%%~a" == "vers" (if /i "%%~b" == "rem" (set "_sts=Remastered")else set "_sts=Original" )else if /i "%%~a" == "lang" (if /i "%%~b" == "eng" (set "_lng=EnglisheSprache")else set "_lng=DeutscheSprache" )else if /i "%%~a" == "enhancements" (if "%%~b" == "0" (set "_enh=EnhancementsOff")else set "_enh=EnhancementsOn" )else if /i "%%~a" == "modifications" (if "%%~b" == "0" (set "_mod=ModificationsOff")else set "_mod=ModificationsOn")
goto %:^) :: Case N | Strings | Folder Names :: ------- --------- -------------------------------------------------------- :: Case 01 | GerOrig00 | DeutscheSprache.Original.EnhancementsOff.ModificationsOff :: Case 02 | GerOrig01 | DeutscheSprache.Original.EnhancementsOff.ModificationsOn :: Case 03 | GerOrig10 | DeutscheSprache.Original.EnhancementsOn.ModificationsOff :: Case 04 | GerOrig11 | DeutscheSprache.Original.EnhancementsOn.ModificationsOn :: Case 05 | GerRem00 | DeutscheSprache.Remastered.EnhancementsOff.ModificationsOff :: Case 06 | GerRem01 | DeutscheSprache.Remastered.EnhancementsOff.ModificationsOn :: Case 07 | GerRem10 | DeutscheSprache.Remastered.EnhancementsOn.ModificationsOff :: Case 08 | EngRem11 | EnglisheSprache.Remastered.EnhancementsOn.ModificationsOn :: Case 09 | EngOrig00 | EnglisheSprache.Original.EnhancementsOff.ModificationsOff :: Case 10 | EngOrig01 | EnglisheSprache.Original.EnhancementsOff.ModificationsOn :: Case 11 | EngOrig10 | EnglisheSprache.Original.EnhancementsOn.ModificationsOff :: Case 12 | EngOrig11 | EnglisheSprache.Original.EnhancementsOn.ModificationsOn :: Case 13 | EngRem00 | EnglisheSprache.Remastered.EnhancementsOff.ModificationsOff :: Case 14 | EngRem01 | EnglisheSprache.Remastered.EnhancementsOff.ModificationsOn :: Case 15 | EngRem10 | EnglisheSprache.Remastered.EnhancementsOn.ModificationsOff :: Case 16 | EngRem11 | EnglisheSprache.Remastered.EnhancementsOn.ModificationsOn
%:^)
<con: %__AppDir__%Findstr.exe /i "|.!_lng!.!_sts!.!_enh!.!_mod!" <"%~f0"
2>nul md "!_lng!.!_sts!.!_enh!.!_mod!" & endlocal & goto :eOf || exit /b 
  • File conf.ini content:
lang=eng
vers=ori
enhancements=1
modifications=0
  • Outputs Results:
 :: Case 11 | EngOrig10 | EnglisheSprache.Original.EnhancementsOn.ModificationsOff


  • For all mkdir .\Folder and also all yours CaseStringOptions.bat in one bat:
@echo off
cd /d "%~dp0" && setlocal enabledelayedexpansion
set "_str=vers= lang= enhancements= modifications="
for /f tokens^=1*delims^=^= %%a in ('%__AppDir__%Findstr.exe /ibl "!_str!" ^<.\conf.ini
=;')do if /i "%%~a" == "vers" (if /i "%%~b" == "rem" (set "_sts=Rem")else set "_sts=Orig" )else if /i "%%~a" == "enhancements" (if "%%~b" == "0" (set "_enh=0")else set "_enh=1" )else if /i "%%~a" == "modifications" (if "%%~b" == "0" (set "_mod=0")else set "_mod=1" )else if /i "%%~a" == "lang" (if /i "%%~b" == "eng" (set "_lng=Eng")else set "_lng=Ger")
goto %:^) :: Case N | Strings/Script | Folder Names To Create :: Case 01 | .\GerOrig00.bat | DeutscheSprache.Original.EnhancementsOff.ModificationsOff :: Case 02 | .\GerOrig01.bat | DeutscheSprache.Original.EnhancementsOff.ModificationsOn :: Case 03 | .\GerOrig10.bat | DeutscheSprache.Original.EnhancementsOn.ModificationsOff :: Case 04 | .\GerOrig11.bat | DeutscheSprache.Original.EnhancementsOn.ModificationsOn :: Case 05 | .\GerRem00.bat | DeutscheSprache.Remastered.EnhancementsOff.ModificationsOff :: Case 06 | .\GerRem01.bat | DeutscheSprache.Remastered.EnhancementsOff.ModificationsOn :: Case 07 | .\GerRem10.bat | DeutscheSprache.Remastered.EnhancementsOn.ModificationsOff :: Case 08 | .\EngRem11.bat | EnglisheSprache.Remastered.EnhancementsOn.ModificationsOn :: Case 09 | .\EngOrig00.bat | EnglisheSprache.Original.EnhancementsOff.ModificationsOff :: Case 10 | .\EngOrig01.bat | EnglisheSprache.Original.EnhancementsOff.ModificationsOn :: Case 11 | .\EngOrig10.bat | EnglisheSprache.Original.EnhancementsOn.ModificationsOff :: Case 12 | .\EngOrig11.bat | EnglisheSprache.Original.EnhancementsOn.ModificationsOn :: Case 13 | .\EngRem00.bat | EnglisheSprache.Remastered.EnhancementsOff.ModificationsOff :: Case 14 | .\EngRem01.bat | EnglisheSprache.Remastered.EnhancementsOff.ModificationsOn :: Case 15 | .\EngRem10.bat | EnglisheSprache.Remastered.EnhancementsOn.ModificationsOff :: Case 16 | .\EngRem11.bat | EnglisheSprache.Remastered.EnhancementsOn.ModificationsOn
%:^)
for /f usebackq^tokens^=2-5^delims^=^|^ %%i in (`%__AppDir__%Findstr.exe /i "!_lng!!_sts!!_enh!!_mod!" ^<"%~f0"
`)do echo\%%i %%~j ^| File: !_lng!!_sts!!_enh!!_mod! ^| Dir: %%~l& 2>nul mkdir ".\%%~l" & Call "%%~k" & endlocal
  • File conf.ini content:
lang=eng
vers=orig
enhancements=0
modifications=0
  • Outputs Results:
Case 09 | File: EngOrig00 | Dir: EnglisheSprache.Original.EnhancementsOff.ModificationsOff

Obs.: usebackq^tokens^=2-5^delims^=^|^SpaceSpace%%i in (...

I figured it out. Huge Credit to User Bobo for giving me to the right direction. This is the code, if anybody else ever want to do the same thing:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims==" %%G in ('findstr "lang=" conf.ini') do set LNG=%%G
for /f "tokens=2 delims==" %%G in ('findstr "vers=" conf.ini') do set VER=%%G
for /f "tokens=2 delims==" %%G in ('findstr "enhancements=" conf.ini') do set ENH=%%G
for /f "tokens=2 delims==" %%G in ('findstr "modifications=" conf.ini') do set MOD=%%G
if "%LNG%"=="deu" ( if "%VER%"=="orig" ( if "%ENH%"=="0" ( if "%MOD%"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOff ) if "%MOD%"=="1" ( mkdir DeutscheSprache.Original.EnhancementsOff.modificationsOn ) ) if "%ENH%"=="1" ( if "%MOD%"=="0" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOff ) if "%MOD%"=="1" ( mkdir DeutscheSprache.Original.EnhancementsOn.modificationsOn ) ) ) if "%VER%"=="rem" ( if "%ENH%"=="0" ( if "%MOD%"=="0" ( mkdir DeutscheSprache.Remastered.EnhancementsOff.modificationsOff ) if "%MOD%"=="1" ( mkdir DeutscheSprache.Remastered.EnhancementsOff.modificationsOn ) ) if "%ENH%"=="1" ( if "%MOD%"=="0" ( mkdir DeutscheSprache.Remastered.EnhancementsOn.modificationsOff ) if "%MOD%"=="1" ( mkdir DeutscheSprache.Remastered.EnhancementsOn.modificationsOn ) ) )
)
if "%LNG%"=="eng" ( if "%VER%"=="orig" ( if "%ENH%"=="0" ( if "%MOD%"=="0" ( mkdir EnglischeSprache.Original.EnhancementsOff.modificationsOff ) if "%MOD%"=="1" ( mkdir EnglischeSprache.Original.EnhancementsOff.modificationsOn ) ) if "%ENH%"=="1" ( if "%MOD%"=="0" ( mkdir EnglischeSprache.Original.EnhancementsOn.modificationsOff ) if "%MOD%"=="1" ( mkdir EnglischeSprache.Original.EnhancementsOn.modificationsOn ) ) ) if "%VER%"=="rem" ( if "%ENH%"=="0" ( if "%MOD%"=="0" ( mkdir EnglischeSprache.Remastered.EnhancementsOff.modificationsOff ) if "%MOD%"=="0" ( mkdir EnglischeSprache.Remastered.EnhancementsOff.modificationsOn ) ) if "%ENH%"=="1" ( if "%MOD%"=="0" ( mkdir EnglischeSprache.Remastered.EnhancementsOn.modificationsOff ) if "%MOD%"=="1" ( mkdir EnglischeSprache.Remastered.EnhancementsOn.modificationsOn ) ) )
)
endlocal
4

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy