Grotesque windows hack of the evening
ls, written in CMD:
@echo off
setlocal
set args=
set opts=
:getopt
set foo=%1
set "isflag=%foo:~0,1%"
if "%isflag%"=="-" (
set "opts=%opts%%foo:-=/%"
shift
goto getopt
)
if [%opts%]==[] set opts=/d
:concat
if NOT [%1]==[] (
set foo=%1
set "args=%args% %foo:/=\%"
shift
goto concat
)
dir %opts% %args% | findstr /v /b /c:" "
Notice the horrible hoops I need to jump through to change options from -opt
to /opt
and to convert forward slashes in filenames to backwards slashes. And oh my god CMD is fragile; if I pass it any filenames with spaces in them it will explode on me (there are ways to get around it, I think, but they aren’t trivial and I just want to be able to do the simple cases of ls
on the windows machine I’m using as a minecraft server.)
It’s nice that Microsoft is stubbornly clinging to backwards compatibility, but wow CMD is a weirdly assembled shell and I wish they’d do a native port of ksh.