Windows Batch(CMD)可能是最不适合代码打标的语言。
避免换行符。如果您要查找以字节为单位的最短代码(而不是字符),则将希望摆脱所有不必要的回车符(换行符= 2个字节)。您可以使用该&
操作来执行此操作,为每个命令修剪一个字节。
echo Hello&echo World.
设置变量。使用开关设置变量时,set
解析器将忽略空格。
set /a a+=1
set /p b="User Input: "
:: Will be handled the same as..
set/aa+=1
set/pb="User Input: "
请注意,相同的解析器规则并不适用于所有命令-例如,循环需要空格。除了set, string, or command
(即括号内的内容)和单词之间do
。
for /f %%a in (file.txt)do ...
简单的数学表达式。另外,请注意我在set /a
命令中用于递增的表达式。对于简单的数学表达式,请使用+= -= *= /=
代替(例如)set /a a=%a%+1
。
收集命令输出。要获取命令的输出,有时输出到文件或从文件中读取有时会很有用,否则您可能在其中使用了for循环来收集输出:
for /f %%a in ('echo test') do set a=%%a
:: Can be shortened to
echo test>f&set/pa=<f
echo test
将stdout发送到名为f,的文件>f
,启动新命令&
并在变量中获取文件的内容set/pa=<f
。显然,这并不总是有用的。但是可能只需要一行输出即可。
命令输出。禁止显示命令输出时,请@
在命令之前使用,除非您需要禁止删除9条以上的命令,在这种情况下,请@echo off
在脚本开头使用。@echo off
的长度为9个字节,因此使用更长的脚本通常可以节省更多的字节。
命令通常不只是做显而易见的事情 -考虑命令的作用。例如; 如果您需要设置一个变量并回显另一个变量,而不是:
set a=OUTPUT
echo %a%
echo test>f
set /p b=<f
您可以将set命令与/p
开关一起使用%a%
以为您输出。
set a=OUTPUT
echo test>f
set /p b=%a%<f
完全打高尔夫球...
set a=OUTPUT&echo test>f&set/pb=%a%<f
任何其他技巧都值得赞赏-如果我有其他想法,我会不断更新。