所以我正在创建一个批处理操作系统,但问题是......我不肯说缺少操作员!!
以下是我的代码片段:
@echo off
title LiME - Version 1.0
mode con: cols=86 lines=21
if exist "\SystemLiME" goto startup.jsc
) else (
if not exist "\SystemLiME" goto boot.jfk
:boot.jfk
cls
echo MAINBOOTCONFIG
echo.
echo CHECKING FOR VOLUMES TO CREATE..
ping localhost -n 5 >nul
if exist "\SystemLiME" set create-vol1=0
) else (
if not exist "\SystemLiME" set create-vol1=1
if exist "\SystemLiME\pkgs" set create-vol2=0
) else (
if not exist "SystemLiME\pkgs" set create-vol2=1
if %create-vol1% == 0 set /a count-vol-create=0
if not %create-vol1% == 0 set /a count-vol-create=%count-vol-create%+=1
if %create-vol2% == 0 set /a count-vol-create=%count-vol-create%+=0
if not %create-vol2% == 0 set /a count-vol-create=%count-vol-create%+=1
echo %count-vol-create%
pause
但我关注的是:
:boot.jfk
cls
echo MAINBOOTCONFIG
echo.
echo CHECKING FOR VOLUMES TO CREATE..
ping localhost -n 5 >nul
if exist "\SystemLiME" set create-vol1=0
) else (
if not exist "\SystemLiME" set create-vol1=1
if exist "\SystemLiME\pkgs" set create-vol2=0
) else (
if not exist "SystemLiME\pkgs" set create-vol2=1
if %create-vol1% == 0 set /a count-vol-create=0
if not %create-vol1% == 0 set /a count-vol-create=%count-vol-create%+=1
if %create-vol2% == 0 set /a count-vol-create=%count-vol-create%+=0
if not %create-vol2% == 0 set /a count-vol-create=%count-vol-create%+=1
echo %count-vol-create%
pause
每次我启动此代码时,都会遇到'Missing operator'。 '缺少运营商。' “ECHO已关闭。” '按任意键继续......'
请帮帮我!! :'((顺便说一句,我是新的stackoverflow :))
答案 0 :(得分:0)
使用此批次代码替换第二个发布的批次代码:
:boot.jfk
cls
echo MAINBOOTCONFIG
echo/
echo CHECKING FOR VOLUMES TO CREATE..
%SystemRoot%\System32\ping.exe localhost -n 5 >nul
if exist "\SystemLiME" ( set "CreateVol1=0" ) else ( set "CreateVol1=1" )
if exist "\SystemLiME\pkgs" ( set "CreateVol2=0" ) else ( set "CreateVol2=1" )
if %CreateVol1% == 0 ( set "CountVolCreate=0" ) else ( set /A "CountVolCreate+=1" )
if not %CreateVol2% == 0 set /A CountVolCreate+=1
echo %CountVolCreate%
pause
为了使用echo/
代替echo.
输出空行,请参阅DosTips论坛主题
ECHO. FAILS to give text or blank line - Instead use ECHO/
在批处理文件中指定ping
等可执行文件,其中包含完整路径和文件扩展名,以使批处理文件独立于环境变量 PATH 和 PATHEXT 强>
查看IF ELSE syntax error within batch file?和batch scripting - if exist ./sdcard/file.any using adb
上的答案 set /A
之后的字符串被解释为算术表达式,每个空格/运算符分隔的字符串将自动解释为变量名称,其当前值应转换为32位有符号整数用于评估表达。因此,不需要在算术表达式中使用%VariableName%
或使用!VariableName!
的延迟变量扩展来使用立即变量扩展,因为即使在命令块中只有VariableName
也足够了,除了变量名称包含空格或破折号或其他操作符。
因此,在算术表达式中使用此类变量时,使用包含短划线的变量名称并不好,因为短划线可以解释为减号运算符。 CamelCase命名表示法的使用通常最适合批处理文件中的变量名称。具有CamelCase名称的变量可以在批处理文件中轻松读取和搜索/替换,并且肯定不会与echo
或rem
注释行中的文本输出混淆,例如在以下命令行中批处理文件:
@echo off
rem Assign batch file name to a variable.
set "BatchFileName=%~nx0"
echo Batch file name is: %BatchFileName%
set "BatchFileName="
算术表达式应始终只包含一个等号。像variable=variable+=1
这样的语法绝对不对。右边是variable=variable+1
或更短variable+=1
。
阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案,了解为什么建议使用set "variable=value"
来定义(或删除)环境变量。在一个算术表达式中,空格只是分隔符,通常不需要使用语法set /A "variable=expression"
,但有一些例外,如上面批处理代码的第9行中的例外。
请注意,if exist "\SystemLiME"
表示当前驱动器的 root 中存在名称为SystemLiME
的目录或文件。如果要排除文件名并检查目录是否存在,请在目录路径上附加反斜杠。如果要检查当前目录中是否存在目录,请删除路径开头的反斜杠。
:boot.jfk
cls
echo MAINBOOTCONFIG
echo/
echo CHECKING FOR VOLUMES TO CREATE..
%SystemRoot%\System32\ping.exe localhost -n 5 >nul
if exist "SystemLiME\" ( set "CreateVol1=0" ) else ( set "CreateVol1=1" )
if exist "SystemLiME\pkgs\" ( set "CreateVol2=0" ) else ( set "CreateVol2=1" )
if %CreateVol1% == 0 ( set "CountVolCreate=0" ) else ( set /A "CountVolCreate+=1" )
if not %CreateVol2% == 0 set /A CountVolCreate+=1
echo %CountVolCreate%
pause
此批次代码检查当前目录中是否存在目录 SystemLiME
和SystemLiME\pkgs
,与检查是否存在的上述批次代码进行比较当前驱动器的 root 目录中的文件或目录SystemLiME
以及目录pkgs
中的文件或目录SystemLiME
。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
cls /?
echo /?
if /?
pause /?
ping /?
set /?