批处理程序中未知的“缺少操作数”注释

时间:2019-11-01 04:00:59

标签: batch-file operands

我正在为Windows 10创建一个小的“懒惰睡眠” .bat文件,它运行良好。启动程序时,除了在cmd窗口顶部出现“缺少操作数”之外: cmd windows when I start the program 我是Batch的新手,所以不要苛刻。我已经上网了,但是没有问题可以解决,而且我尝试解决的问题也没有。

这是我的代码(抱歉,法语):

@echo off
Rem 65001 for Unicode, 850 or 863 doesn't seem to work for French accents
chcp 65001

:annuler
set /a txt1=""
set /a tmp=0
set /p txt1="Veuillez préciser une unité : (h)eures, (m)inutes ou (s)econdes. (a)nnuler pour sortir du programme. "

IF /i "%txt1%"=="a" goto sortie
IF /i "%txt1%"=="h" goto heures
IF /i "%txt1%"=="m" goto minutes
IF /i "%txt1%"=="s" goto secondes

:heures

    set /p tmp="Dans combien d'heures souhaitez-vous mettre en veille prolongée ? 0 pour annuler : "
    IF /i "%tmp%"=="0" goto annuler
        set /a dur=tmp*3600
        timeout /t %dur%&&rundll32.exe powrprof.dll,SetSuspendState Sleep

:minutes

    set /p tmp="Dans combien de minutes souhaitez-vous mettre en veille prolongée ? 0 pour annuler : "
    IF /i "%tmp%"=="0" goto annuler
        set /a dur=tmp*60
        timeout /t %dur%&&rundll32.exe powrprof.dll,SetSuspendState Sleep

:secondes

    set /p tmp="Dans combien de secondes souhaitez-vous mettre en veille prolongée ? 0 pour annuler : "
    IF /i "%tmp%"=="0" goto annuler
        set /a dur=tmp
        timeout /t %dur%&&rundll32.exe powrprof.dll,SetSuspendState Sleep

:sortie

    pause

问题是“输入一个单位(小时,分钟,秒),然后输入要进入睡眠模式的计时器的值”。

annuler ”表示“取消” “ sortie ”表示“退出”

感谢您能带来的任何帮助。

2 个答案:

答案 0 :(得分:1)

我知道了。

问题在于/a开关将设置数值。我将其从txt1变量的第5行中删除,因为它应该是文本。

tutorialspoint上找到了答案。

答案 1 :(得分:0)

您的批处理文件的第一个Set /P命令会更好,(因为它只期望特定的条目),而改用choice.exe。对于第二条Set /P命令,您需要了解最终用户与choice命令不同,它根本无法输入任何内容或绝对不能输入任何内容。这意味着除非您验证输入,否则后续命令可能不起作用。另外,您的代码重复性很强,因此我为您重组了代码,并删除了有问题的set /a

@Echo Off
ChCp 65001 >NUL
choice /C hmsa /N /M "Veuillez préciser une unité : (h)eures (m)inutes ou (s)econdes. (a)nnuler pour sortir du programme."
If ErrorLevel 4 GoTo :EOF
If ErrorLevel 3 Set "str=e secondes"&Set "mult=1"
If ErrorLevel 2 Set "str=e minutes"&Set "mult=60"
If ErrorLevel 1 Set "str='heures"&Set "mult=3600"

:Combien
Set "dur="
Set /P "dur=Dans combien d%str% souhaitez-vous mettre en veille prolongée? "
Echo "%dur%"|findstr /R  "^\"[0-9]*\"$">NUL||GoTo Combien
Set /A dur *=mult
Timeout /T %dur% /NoBreak
rundll32 powrprof.dll,SetSuspendState Sleep
相关问题