My for loop with Yes/No give diverent output
有时我按Y键,结果是:不
有时我按N键,它转到:是的。
我做错什么了?
现在应该循环3次,这不是问题
只有打过电话才不好。
希望有人能帮助我
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | CD %INSTALLDIR% SET test= FOR /f %%a in ('dir /b /o:-n') do ( SET test=%%a ECHO Generate a answer file for %test%? set INPUT= set /P INPUT=[Y/N]: IF /I '%INPUT%'=='y' call :yes IF /I '%INPUT%'=='n' call :no ) goto end :yes cd %test% SET APPNAME=<%test%.options for /f"tokens=1*" %%b in (%test%.options) do set OPTIONS=%%b echo %APPNAME% echo %OPTIONS% goto end :no echo Skipping %%a goto end :end ECHO NEXT |
在Windows命令解释器对整个命令块进行预处理的过程中,在执行最终执行已预处理的命令块之前,Windows命令解释器对命令块进行预处理时,扩展了命令块中以
这意味着在执行命令for之前,
在命令提示窗口
但对于这个任务,有一个更好的解决方案,然后启用延迟扩展。不使用
另请参阅Microsoft支持文章测试,了解批处理文件中的特定错误级别,解释如何在不使用延迟扩展的情况下,在批处理文件中甚至在命令块中评估
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | cd /D"%INSTALLDIR%" for /F %%I in ('dir /AD /B /O:-N 2^>nul') do ( %SystemRoot%\System32\choice.exe /C YN /N /M"Generate an answer file for %%I [Y/N]?" if errorlevel 2 (echo Skipping %%I) else call :GetOptions"%%I" ) goto :EOF :GetOptions cd /D"%~1" set APPNAME=<"%~1.options" for /F"usebackq" %%J in ("%~1.options") do set"OPTIONS=%%J" echo %APPNAME% echo %OPTIONS% goto :EOF |
为了了解使用的命令及其工作方式,请打开一个命令提示窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
call /? cd /? choice /? dir /? echo /? for /? goto /? if /? set /?
还可以阅读有关使用命令重定向操作符来解释
另请参见goto:eof返回到哪里?