Я пытался создать прокручиваемый список для пакетного файла, используя метод, найденный здесь: прокручиваемые списки в Файлы .bat Кредит https://stackoverflow.com/users/778560/aacini
Один из них, который я попытался добавить обратно в свой код для своего обычного пакета по несколько строк за раз, заметил, что решение не работает, когда я использую WMIC. В чем причина этого и есть ли простое решение? Вы можете запустить приведенный ниже код, а затем раскомментировать строку WMIC и увидеть, что она больше не будет работать.
Изменить: я использую Windows 7
Спасибо!
@if (@CodeSection == @Batch) @then
@echo off
setlocal EnableDelayedExpansion
color F0
::FOR /F "tokens=2 delims==" %%A IN ('WMIC csproduct GET Name /VALUE ^| FIND /I "Name="') DO SET machine=%%A
Echo Reset or Continue
Set MenuOptions=RESET Continue
call :ShowMenu
pause
exit
:ShowMenu
set numOpts=0
for %%a in (%MenuOptions%) do (
set /A numOpts+=1
set "option[!numOpts!]=%%a"
)
rem Clear previous doskey history
doskey /REINSTALL
rem Fill doskey history with menu options
cscript //nologo /E:JScript "%~F0" EnterOpts
for /L %%i in (1,1,%numOpts%) do set /P "var="
rem Send a F7 key to open the selection menu
cscript //nologo /E:JScript "%~F0"
set /P "MenuSelected=Option Selected: "
echo/
@end
var wshShell = WScript.CreateObject("WScript.Shell"),
envVar = wshShell.Environment("Process"),
numOpts = parseInt(envVar("numOpts"));
if ( WScript.Arguments.Length ) {
// Enter menu options
for ( var i=1; i <= numOpts; i++ ) {
wshShell.SendKeys(envVar("option["+i+"]")+"{ENTER}");
}
} else {
// Enter a F7 to open the menu
wshShell.SendKeys("{F7}");
}
wmic
, заключается в том, что, возможно, ваш пакетный файл называетсяwmic.bat
илиwmic.cmd
, и он вызывает сам себя. Также обратите внимание, что вам не хватаетgoto :eof
непосредственно перед строкой@end
- person MC ND   schedule 21.10.2016wmic
. Протестировано, например.findstr /N "wshShell" %~f0
(Windows 8.1). - person JosefZ   schedule 21.10.2016doskey /reinstall
не очищает историю предыдущих команд, сwmic
или без него. - person MC ND   schedule 21.10.2016wmic
вызывает пакет из подсказкиcmd
.D:\bat\SO\40165693.bat
не будет показывать меню, в то время какCMD /C D:\bat\SO\40165693.bat
работает как шарм… @MCND Я могу подтвердить, чтоdoskey /reinstall
не очищает историю предыдущих команд (безWMIC
), когда неоднократно запускаетD:\bat\SO\40165693.bat
на втором и после запуска. - person JosefZ   schedule 21.10.2016