Windows Batch (CMD) ist wahrscheinlich die am wenigsten geeignete Sprache für das Code-Golfen.
Vermeiden Sie Zeilenumbrüche . Wenn Sie nicht nach Zeichen, sondern nach dem kürzesten Code in Byte suchen, müssen Sie alle unnötigen Zeilenumbrüche (Zeilenumbrüche = 2 Byte) vermeiden. Mit &
dieser Operation können Sie für jeden Befehl ein Byte abschneiden.
echo Hello&echo World.
Variablen setzen . Beim Setzen von Variablen mit Hilfe von Schaltern set
ignoriert der Parser Leerzeichen.
set /a a+=1
set /p b="User Input: "
:: Will be handled the same as..
set/aa+=1
set/pb="User Input: "
Beachten Sie, dass die gleichen Parser-Regeln nicht für alle Befehle gelten - beispielsweise für Schleifen, die Leerzeichen erfordern. Außer zwischen dem set, string, or command
(dh was sich in den Klammern befindet) und dem Wort do
.
for /f %%a in (file.txt)do ...
Einfache mathematische Ausdrücke . Beachten Sie auch den Ausdruck, den ich zum Inkrementieren des set /a
Befehls verwendet habe. Für einfache mathematische Ausdrücke verwenden Sie += -= *= /=
statt (zum Beispiel) set /a a=%a%+1
.
Befehlsausgabe wird gesammelt . Um die Ausgabe eines Befehls zu erhalten, kann es manchmal nützlich sein, in eine Datei auszugeben und daraus zu lesen, wo Sie andernfalls möglicherweise eine for-Schleife verwendet haben, um die Ausgabe zu erfassen:
for /f %%a in ('echo test') do set a=%%a
:: Can be shortened to
echo test>f&set/pa=<f
echo test
Senden Sie stdout an eine Datei mit dem Namen f, >f
starten Sie einen neuen Befehl &
und rufen Sie den Inhalt der Datei in einer Variablen ab set/pa=<f
. Offensichtlich ist das nicht immer nützlich. Dies kann jedoch der Fall sein, wenn Sie nur eine einzige Ausgabezeile benötigen.
Befehlsausgabe . Verwenden @
Sie beim Unterdrücken der Befehlsausgabe vor den Befehlen, es sei denn, Sie müssen mehr als 9 Befehle unterdrücken. Verwenden Sie in diesem Fall @echo off
zu Beginn Ihres Skripts. @echo off
ist 9 Bytes lang und spart daher in der Regel mehr Bytes bei längeren Skripten.
Befehle tun oft mehr als nur das, was offensichtlich ist - denken Sie darüber nach, was Ihre Befehle tun. Beispielsweise; Wenn Sie eine Variable setzen und eine andere Variable ausgeben müssen, anstatt:
set a=OUTPUT
echo %a%
echo test>f
set /p b=<f
Sie können den Befehl set mit dem /p
Schalter verwenden, um %a%
für Sie auszugeben .
set a=OUTPUT
echo test>f
set /p b=%a%<f
Völlig golfen ...
set a=OUTPUT&echo test>f&set/pb=%a%<f
Ein paar Beispiele - Summe aller Ziffern zählen - Goldbachs Vermutung .
Alle anderen Tipps sind mehr als willkommen - ich werde dies weiter aktualisieren, wenn mir etwas anderes einfällt.