Batch 程序中的未知 "missing operand" 评论

Unknown "missing operand" comment in Batch program

我正在为 Windows 10 制作一个小的 "lazy sleep" .bat 文件,它运行良好。除了我在启动程序时在 cmd windows 顶部得到一个 "missing operand" : 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

问题是"enter a unit (hour, minute, second) and then enter the value for the timer to got o sleep mode"。

"annuler" 表示 "cancel" “出击”表示"exit"

感谢您提供的任何帮助。

我明白了。

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

tutorialspoint 上找到了答案。

您的批处理文件的第一个 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