echo "enter first number:"
read first_num
变为 set /p first_num="输入第一个数字"
while [ first_num && second_num != 999 ]
没有 WHILE - 必须接线。想想俱乐部和岩石。
:loop
if %first_num%==999 goto endloop
if %second_num%==999 goto endloop
...
goto loop
:endloop
:name是一个标签,%var%检索的内容var- 如果字符串包含空格,则始终是用引号括起来的字符串。
if [ second_num != 0 ]; then
翻译是
if NOT %second_num%==0 ( ...things... ) else (...other things...)
或者,当然
if %second_num%==0 ( ...other things... ) else (...things...)
怪癖:(其中之一):第一个左括号必须与 the 出现在同一物理行上,IF并且 theELSE必须与)on-true statemet 序列的 the 在同一物理行上。
echo first_num "/" second_num "=" $((first_num / second_ num)) >> file.txt
无法在回声中进行计算
set /a result=(first_num / second_ num)
或者
set /a result=(%first_num% / %second_ num%)
SET /A应用算术表达式的结果 - 稍后的加法和更多类似 C 的语义
然后
echo %first_num% / %second_num% = %result% >> file.txt
纯粹将元素串在一起。
接下来有一个小问题。在解析过程中,任何 %var% 都会被其 PARSE-TIME 值替换,然后执行该行。因此,ECHO上面的行将显示输入 IF 语句时的值,而不是计算后的值。
两种治疗方法:
您可以使用SETLOCAL ENABLEDELATEDEXPANSION来切换解释器模式。在 DELAYEDEXPANSION 模式下,!var!可用于检索 的 RUN-TIME 值var。在同一上下文中,ASETLOCAL由 a 或到达 END-OF-FILE 终止。ENDLOCALa 之后的任何环境更改SETLOCAL都被 an 撤消,ENDLOCAL这就是为什么它通常在@echo off- 保持环境清洁之后立即执行。
第二种治疗方法是使用子程序。CALL :SUB(冒号的意思是“内部子程序 - 开始标签在这个批处理文件中”。省略它意味着“这是一个外部可执行文件”) CALL 创建一个新的上下文,复制当时存在的环境变量,所以
:sub
echo %first_num% / %second_num% = %result% >> file.txt
goto :eof
将显示执行 a 时环境中的变量CALL :SUB。请注意GOTO :EOF(冒号的REQUIRED意思是“转到文件的物理结尾”-EOF不应声明标签...
(还要注意流向通常放置在批处理文件末尾的子例程。明智的做法是GOTO :EOF确保不会发生流向...
#Mod 5 of numbers 1-100:
评论指标正式上线REM
rem Mod 5 of numbers 1-100:
但
::Mod 5 of numbers 1-100:
经常使用,因为它更容易键入 BUT 因为它实际上是对标签的滥用,它实际上是一个标签,并且标签不能用于复合语句中,你不能在括号中使用它IF ... (...) else (...)orFOR...DO (...)
for i in {1...100}
变成
for /L %%i in (1,1,100) do (
元变量%%i是区分大小写和单个字符的。在 aFOR /L元素是(开始,步骤,结束) -FOR /?从提示(或通常command /?从提示)中查看 docco...
result=$((i % 5))
变成
set /a result=%%i %% 5
/a因为 RHS 是要计算的算术表达式;%% 5 因为%escapes %,空格无关紧要,处理器需要知道%正在使用 MOD 运算符,而不是%5(第五个命令行参数)
int sum=0
没有类型之类的东西;所有环境变量都是字符串,并且只被set /a语句解释为整数
所以 - 这就是它的全部......