[1.1.61] - 2026-11-03
Fixed
- S003 counts a keyword only where it reads the start of a command, so
dir SET a=1anddir ^& SET a=1no longer countSET. Dropping keywords can change the majority casing - For S003 a command starts after a separator, any unescaped parenthesis included,
ELSE,DO,<or2<, an IF condition,CALL,STARTwith its switches and its title, the first quoted word, andcmd,%comspec%or!comspec!, by name or path, quoted or not, with/c,/kor/r. A comma, semicolon or=standing alone before a command is skipped - S003 reads
^&and^|as separators in the command string ofcmd /corFOR /Fand in an internal command thatSTARTruns, which a child cmd.exe runs, and glued switches such ascmd /d/corcmd /cset, as cmd.exe does. There a^)closes a block opened in the string - The string of
FOR /Fends at the first unescaped)in its set for S003, even after an unescaped( - After a line that ends in
^, S003 reads the next line's first caret as escaped where that line starts with an odd run of carets and&or|, so it countsSETin^& SETand^^^& SET - S003 now misses a command after
if (a b) == x,if 1==1(orif defined=x, or after a%debug%prefix, among others. A word glued to@, as in@SET, is not counted, as before - Where START runs cmd, S003 reads one child cmd.exe, not two, so it no longer counts
SETinstart cmd /k dir ^^^| SET a=1. A quoted word after START's title is the program. cmd without/c,/kor/rruns none of its words, as instart /b cmd ^& SET a=1 - S003 keeps the command string after a quoted cmd, so
"cmd.exe" /c "SET a=1"countsSET."C:\x\app.exe" /c "SET a=1"still does not
Changed
- The MegaLinter install pin is 1.1.61