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
我正在为 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