ifthen

首页  后退  前进


down2

根据条件运行命令.

<IF> ... <THEN> ... <ELSE> ... <ENDIF>

 

<IF> expression <THEN> commands1 <ELSE> commands2 <ENDIF>

 

参数:

<IF>

条件起始标签.

expression

条件. 如果表达式为true,则执行

<THEN>

标签.

commands1

命令行. 命令及其参数具有与示例中相同的语法.

<ELSE>

标签. 如果表达式表达式为假,则命令2表达式将在[可选]

commands2

命令行. 命令及其参数具有与示例中相同的语法. [可选]

<ENDIF>

条件结束标签.

备注

•标签,条件和命令由空格分隔.

•表达式表达式可以包含布尔比较运算符AND,OR和NOT,逻辑运算符<,<=,>,> =,=,==和<>

比较操作者

除了==之外,以下运算符不考虑使用字符串的情况,并且当比较数字和字符串时,字符串将转换为数字



=

如果左边的值等于右边的值,则为True.

==

如果相等,则为True..区分大小写。如果没有,值将转换为字符串.此运算符仅用于字符串。

<>

如果值不相等,则为True.

>

如果第一个值大于第二个值,则为True.

>=

如果第一个值大于或等于第二个值,则为True.

<

如果第一个值小于第二个值,则为True.

<=

如果第一个值小于或等于第二个值,则为True.

逻辑运算

AND

逻辑与操作.

OR

逻辑或运算.

NOT

逻辑非操作.

括号

在使用AND,OR,NOT很困难条件下,可使用括号.

括号通过空格与运算符和条件分开: a = b AND ( x = y OR x = z )

几个连续的括号写成没有空格。: (( a <> b ) AND ( с == d OR ( x = y AND x = z )))

左括号的数量必须等于右括号的数量.

 

例:

"sends=5 wends=@[tc=AA] <IF> ((( GLOBALSENDS<1> <> 3 )) AND (( <info=i1GLOBALWENDS<1>//> >= 15 ) OR ( <info=i2GLOBALWENDS<1>//> >= 15 ))) <THEN> GLOBALWENDS<a> <ENDIF>" - 计算几个条件的例子(光标下的图像文件)[ifthen]

"sends=5 wends=@[tc=AA] <IF> GLOBALSENDS<1> <> 3 AND ( <info=i1GLOBALWENDS<1>//> >= 15 OR <info=i2GLOBALWENDS<1>//> >= 15 ) <THEN> GLOBALWENDS<a> <ENDIF>" - 计算几个条件的例子(光标下的图像文件)[ifthen]

 

 

 

•条件表达式可以包含:

  » 数字或字符串

» GLOBALNAME<...>  - 全局元素的数组(列表)中的元素的路径或数量,请参见附录23.

» [info]或 <info>  - 通过参数收到的信息,参见附录10

» [input],[combo],[group]  - 输入的参数信息,请参见附录18.

» Clpget  - 剪贴板中的信息.

» exect命令的变量$var _...的值

» Autoit函数:用于计算,使用函数Exec​​ute(String),其中String  - 一串函数...见 描述

 

•为简单操作创建条件.不支持嵌套 <IF>, <SWITCH>, 循环 <FOR> 和处理特殊方法 <HOTKEY=...>, <PRESS=...>, <TIME=...> 在结构内部

•可能涉及几个连续的<IF>条件.

 

参见:

anf2d, arr2d, asave, cmd64, cmdcm, cname, cycles, dilog, dubls, dumpxx, envgt, global, hotkiy, inbox, listx, macro, noglob, pause, pressy, scrpt, sends, slects, slist, swcmd, swcths, tempxx, timess, zmenu, zmenz

例子

 

<IF> [info=s70firefox.exe] = 0 <THEN> start=Browser <ENDIF> ;; 如果firefox没有运行,则运行

 

<IF> [info=s70firefox.exe] = 0 <THEN> start=Browser pause=5s <ENDIF> xends=-1||&&(~~+)!!\~\~ sends=-1||@@RUSinURIANSI cmdcm=[check=BOX_TorrentSearch] zends=GLOBALCHECK1<k|0|¤>||¤!!<¤> cmdcm=GLOBALZENDS<1> ;; 搜索剪辑板内容的torrent跟踪器,预先运行Mozilla Firefox(如果已关闭)

 

<IF> [info=x1] = 0 <THEN> swcmd=sprtr=100÷÷tcimg=$cm101||sprtr=50÷÷tcimg=$cm102||SeparatorRezimActive <ELSE> swcmd=sprtr=0÷÷tcimg=$cm201||sprtr=50÷÷tcimg=$cm202||SeparatorRezimActive <ENDIF> ;; 将主动面板切换到"列表"模式+将面板宽度调整到100%,再次按下时,返回"详细"模式+面板宽度为50%

 

<IF> [info=x1] = 1 <THEN> swcmd=sprtr=10??tcimg=$cm269||sprtr=50??tcimg=$cm269||SeparatorAP <ELSE> swcmd=sprtr=90??tcimg=$cm269||sprtr=50??tcimg=$cm269||SeparatorAP <ENDIF> ;; 将活动面板切换到“查看缩略图”模式+将活动面板的宽度调整为最大90%;再次按下时,退出“查看缩略图”模式+面板宽度50%

 

 

<IF> [info=x14] = *.* <THEN> tcprm=CD~~*.exe <ELSE> tcprm=CD~~*.* <ENDIF> ;; 切换过滤器*.*和*.exe

 

<IF> [info=x52] = 000_Osnovnaja <THEN> tcprm=OPENBAR~~%%COMMANDER_PATH%%\BAR\002_Multimedia.bar <ELSE> tcimg=$cm2901 <ENDIF> ;; 切换:如果活动工具栏的名称为000_Osnovnaja,则打开002_Multimedia.bar,否则工具栏关闭

 

<IF> [info=x60] = 32 <THEN> close=ACTIVE start=%%COMMANDER_PATH%%\TOTALCMD64.EXE <ELSE> close=ACTIVE start=%%COMMANDER_PATH%%\TOTALCMD.EXE <ENDIF> ;; 全指挥官32/64

 

<IF> [info=x60] = 32 <THEN> close=ACTIVE start=%%COMMANDER_PATH%%\TOTALCMD64.EXE||/i=%%COMMANDER_PATH%%\WinCmd64.ini <ELSE> close=ACTIVE start=%%COMMANDER_PATH%%\TOTALCMD.EXE||/i=%%COMMANDER_INI%% <ENDIF> ;; 总共运行Total Commander 32/64与相应的配置文件Wincmd.ini

 

<IF> <info=f1%P%N//> = <info=f1%T%M//> <THEN> infbx=InfoBox5 <ELSE> infbx=InfoBox6 <ENDIF> ;; 比较不同面板中两个文件的MD5校验和,在弹出的窗口中,报告结果

 

<IF> <info=f1%P%N//> = <info=f1%T%M//> <THEN> infbx=InfoBox5 <ENDIF> ;; 比较不同面板中的两个文件,如果MD5校验和匹配,然后在弹出窗口中通知

 

<IF> <info=f1%P%N//> = clpget <THEN> infbx=InfoBox5 <ELSE> infbx=InfoBox6 <ENDIF> ;; 将MD5文件的校验和与剪贴板的校验和进行比较,并在弹出窗口中报告结果

 

<IF> <info=f11%P%N//> = exe <THEN> start=%P%N <ENDIF> ;; 如果文件扩展名在光标exe下,则运行应用程序

 

<IF> <info=o9"%p"New\//> = 0 <THEN> folds="%p"||New <ENDIF> ;; 在活动面板中创建一个新文件夹(如果不存在)

 

<IF> <info=o9%P%N//> <> 2 OR <info=o9%T%M//> <> 2 <THEN> infbx=InfoBox7 <ENDIF> ;; 检查 - 如果其中一个对象不是文件,则会输出消息

 

<IF> <info=s151"%t"|B//> > <info=o300%L|3|B//> <THEN> copys=%L||"%t"//0 <ELSE> infbx=Ошибка||Не~~хватает~~места~~на~~целевом~~диске~~<info=o79"%t">||5||200||70 <ENDIF> ;; 检查所选对象的大小和目标磁盘(对侧面板)的可用空间的大小:如果较少,则将所选对象复制到对侧面板(如果无) - 发出消息

 

<IF> 0 <> <info=t61-1> <THEN> textt=%P%N||##cliptext||upd<1> <ENDIF> ;; 如果剪贴板不为空,则将光标下的文件内容替换为剪贴板的内容

 

<TIME=h#-1:h#+1:s15> <IF> [info=s70*9060] = 1 <THEN> sndps=1 <ELSE> close=:PID: <ENDIF> ;; 每15秒发出一次哔声,直到进程关闭PID = 9060

 

exect=$var_ii=##[input=BOX68]||$var_im=$var_ii&'n'||$var_pid=@AutoItPID pause=$var_im <TIME=h#-1:h#+1:s5> <IF> [info=s70*$var_pid] = 1 <THEN> sndps=1 <ELSE> close=:PID: <ENDIF> <TIMEEND> exect=MsgBox(262144+64,'Напоминаю','Прошло~~$var_ii~~минут~~!'&@CR&'Пора~~на~~кухню!') ;; 在指定的分钟后发出消息(数字在对话框中输入)+显示对话框时,每5秒发出声音通知$var_ii

 

exect=$var_name='"%O"'||$var_path='%P%N' <IF> <info=n4|32-255??$var_name> = 0 <THEN> sends=$var_name??1||@@Diacritic!!1 copyy=%P%N||"%p"//4||##GLOBALSENDS<1> exect=$var_path='GLOBALCOPYY<1>' <ENDIF> start=%%COMMANDER_PATH%%\Programs\Atlantis\Atlantis.exe||$var_path ;; 打开亚特兰蒂斯程序中光标下的文件,如果文件名不具有ASCII字符,那么它们被替换,并且打开一个新名称的重复文件

 

exect=$var_name='"%O"'||$var_path='%P%N' <IF> <info=n4|32-255??$var_name> = 0 <THEN> sends=$var_name??1||@@Diacritic!!1 copyy=%P%N||"%p"//4||##GLOBALSENDS<1> exect=$var_path='GLOBALCOPYY<1>' textt=%%COMMANDER_PATH%%\Programs\Atlantis\Temp\Atlantis_Name.txt||$$@CRLF$var_path@CRLF"%O"||formt<60>||code<4>||backup<0> <ENDIF> start=%%COMMANDER_PATH%%\Programs\Atlantis\Atlantis.exe||$var_path ;; 在程序Atlantis中的光标下打开文件,如果文件名不具有ASCII字符,那么它们被替换,并且打开一个新名称的重复文件,从程序文件夹写入Temp文件夹到一个临时文件中Atlantis_Name.txt,用于后续重命名

 

exect=$var_s=ClipGet() <IF> $var_s <> 320x240 <THEN> exect=$var_s='100x100' <ENDIF> GLOBALEXECT<a> ;; 如果剪贴板的内容不等于320x240行,则变量$var_s = 100x100

 

exect=$var_s=ClipGet()||$var_n=StringRegExp('$var_s','(\d{1,4}x\d{1,4})') <IF> $var_n = 0 <THEN> exect=$var_s='100x100' <ENDIF> exect=_ViewValues('$var_s') ;; 如果剪贴板的内容不是0x0或00x00或000x000或0000x0000形式的字符串(其中,而不是零,可以有任何数字),则变量$var_s = 100x100

 

exect=$var_s0=ClipGet()||$var_s1=StringRegExp('$var_s0','(\d{1,4}x\d{1,4})')=0?'100x100':'$var_s0'||_ViewValues('$var_s1') ;; 如果剪贴板的内容不是0x0或00x00或000x000或0000x0000形式的字符串(其中,而不是零,可以有任何数字),则变量$var_s = 100x100

 

global count=%P%N||([\r\n]+cmd\d+=-2[\r\n]+)||0 <IF> GLOBALCOUNT<1> > 0 <THEN> textt=%P%N||formt<bar3> <ELSE> textt=%P%N||formt<bar3,bar1,bar2> <ENDIF> ;; 在BAR文件的圆圈中替换光标分隔符< - >换行符

 

imgpr=1 <IF> <info=f1%P%N//> = clpget <THEN> exect=$var_ibutton=MsgBox(4096,'Сообщение','Контрольные~~суммы~~совпадают.') <ELSE> exect=$var_ibutton=MsgBox(4096,'Сообщение','Контрольные~~суммы~~не~~совпадают.') <ENDIF> ;; 将MD5文件的校验和与剪贴板的校验和进行比较,将结果报告给系统示例窗口

 

moves=%L||:://0//(.+\\).+\\.+\\?//$1 tcimg=$cm2002 <IF> <info=d1"%p"//> = 0 <THEN> delsm="%p"||1||upd<1> <ENDIF> ;; 将所选对象移动到上一级,并删除父文件夹(如果为空)(如果所有子目录为空)

 

moves=%L||:://0//(.+\\).+\\.+\\?//$1 tcimg=$cm2002 <IF> <info=d9"%p"//> = 0 <THEN> delsm="%p"||1||upd<1> <ENDIF> ;; 将所选对象移动到上一级,并删除父文件夹(如果为空)

 

sends=[info=x52] <IF> GLOBALSENDS<1> = 000_Osnovnaja OR GLOBALSENDS<1> = 084_AU3 <THEN> tcprm=OPENBAR~~%%COMMANDER_PATH%%\BAR\002_Multimedia.bar <ELSE> tcimg=$cm2901 <ENDIF> ;; 切换:如果活动工具栏的名称为000_Osnovnaja或084_AU3,则打开002_Multimedia.bar,否则工具栏关闭

 

sends=<inikey=8//%%TCIMG_PATH%%\TCIMG.ini//ZMenu//1_PID> <IF> [info=s70*GLOBALSENDS<1>] = 1 <THEN> keybd=0~~+{TAB} <ENDIF> ;; 调用上下文菜单开始的命令zmenu = hotkey_Menu_Example  - 热键SHIFT + TAB(如果没有进程,那么不调用)

 

sends=-1!!1 <IF> 0 <> <info=t61$GLOBALSENDS[1]> <THEN> textt=%P%N||##GLOBALSENDS<x1>||upd<1> <ENDIF> ;; 如果剪贴板不为空,则将光标下的文件内容替换为剪贴板的内容

 

<IF> <info=x2> = 0 <THEN> tcimg=$cmcm_CopySrcPathToClip <ELSE> tcimg=$cmcm_CopyFullNamesToClip <ENDIF>  ;; 如果活动面板当前光标处于“..”处,则复制当前活动面板路径到剪贴板;否则,复制选定对象的全路径到剪贴板

 

 

up2

tcimage © Аверин Андрей для Total Commander Image Averin-And@yandex.ru