Я хочу изменить серийный номер и номер продукта около 250 серверов (на данный момент они неверны). Я знаю команду, которую мне нужно использовать, но мне нужно иметь возможность вводить определенные параметры в эту команду, а затем запускать ее.
Мне нужны следующие варианты:
Команда, которую я хочу запустить через пакетный файл:
asu64 set SYSTEM_PROD_DATA.SysInfoSerialNum XXXXXXX --host XXX.XXX.XXX.XXX --user XXXX --password XXXX
XXX
— это пользовательский ввод. Я также хотел бы для завершения, а затем вернуться в меню первоначального выбора.
Вот что я сделал до сих пор. (Пожалуйста, извините за простоту. Я очень новичок в этом деле.)
@ECHO OFF
ECHO Test Code
ECHO.
ECHO 1.Serial Number
ECHO 2.Product Name
ECHO.
CHOICE /C 12 /M "Enter your choice:"
ECHO.
IF CHOICE 1 GOTO SerialNumber
IF CHOICE 2 GOTO ProductName
:SerialNumber
ECHO Serial Number
GOTO End
:ProductNumber
ECHO Product Number
GOTO End
PAUSE
Большое спасибо за любую помощь, которую вы можете предложить.
Для этой задачи можно использовать:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "IpAddress = "
set "NameUser = "
set "Password = "
:MainMenu
cls
echo/
echo 1 ... Serial number
echo 2 ... Product number
echo E ... Exit
echo/
%SystemRoot%\System32\choice.exe /C 12E /N /M "Enter your choice:"
if errorlevel 3 exit /B
if not errorlevel 1 goto MainMenu
echo/
if errorlevel 2 goto ProductNumber
set "NumberText=serial"
set "NumberOption=SYSTEM_PROD_DATA.SysInfoSerialNum"
goto NumberPrompt
:ProductNumber
set "NumberText=product"
set "NumberOption=SYSTEM_PROD_DATA.SysInfoProductNum"
:NumberPrompt
set "NumberValue = "
set /P "NumberValue=Please enter %NumberText% number: " || goto NumberPrompt
set "NumberValue=%NumberValue:"=%"
if not defined NumberValue goto NumberPrompt
echo/
if defined IpAddress (set "Default= [%IpAddress%]") else set "Default = "
:IpPrompt
set /P "IpAddress=Please enter IP address%Default%: "
if not defined IpAddress goto IpPrompt
set "IpAddress=%IpAddress:"=%"
if not defined IpAddress goto IpPrompt
echo/
if defined NameUser (set "Default= [%NameUser%]") else set "Default = "
:NamePrompt
set /P "NameUser=Please enter user name%Default%: "
if not defined NameUser goto NamePrompt
set "NameUser=%NameUser:"=%"
if not defined NameUser goto NamePrompt
echo/
if defined Password (set "Default= [%Password%]") else set "Default = "
:PasswordPrompt
set /P "Password=Please enter password%Default%: "
if not defined Password goto PasswordPrompt
set "Password=%Password:"=%"
if not defined Password goto PasswordPrompt
echo/
"%~dp0ASU64.exe" set %NumberOption% "%NumberValue%" --host "%IpAddress%" --user "%NameUser%" --password "%Password%"
echo/
if not errorlevel 1 (
echo The update of the %NumberText% number "%NumberValue%" was successful.
) else echo ERROR: The update of the %NumberText% number "%NumberValue%" failed!
echo/
%SystemRoot%\System32\choice.exe /C CE /N /T 10 /D C /M "Press C to continue or E to exit ..."
if not errorlevel 2 goto MainMenu
endlocal
На исполняемый файл ASU64.exe
ссылается полный путь к пакетному файлу, что означает, что исполняемый файл всегда должен находиться в том же каталоге, что и пакетный файл. Текущий каталог cmd.exe
обработки пакетного файла в этом случае не имеет значения.
Пожалуйста, прочитайте следующие ответы для объяснения кода:
Для понимания используемых команд и того, как они работают, откройте окно командная строка, выполните в нем следующие команды и очень внимательно прочитайте все страницы справки, отображаемые для каждой команды.
call /?
... объясняет %~dp0
... диск и путь аргумента 0, который является путем пакетного файла.choice /?
echo /?
endlocal /?
exit /?
goto /?
if /?
set /?
setlocal /?
@AshSalhan Я обновил код и его описание в соответствии с дополнительной информацией, предоставленной вами в комментарии выше.
Спасибо, Мофи, я не думаю, что exe нужно указывать в команде, так как он работает без этого.
@AshSalhan Вы протестировали пакетный файл, скорее всего, только сохранив его на локальном диске и дважды щелкнув его в проводнике Windows. В этом случае Проводник Windows запускается cmd.exe
с СоздатьПроцесс с lpCurrentDirectory
, установленным explorer.exe
для каталога, содержащего пакетный файл. Таким образом, случайноТекущий каталог — это каталог, содержащий командный файл и ASU64.exe
.
@AshSalhan Запустите пакетный файл как администратор, а текущий каталог, возможно, C:\Windows\System32
, см. Почему «Запуск от имени администратора» изменяет (иногда) текущий каталог пакетного файла?. Скопируйте пакетный файл в сетевое хранилище и получите доступ к папке в сетевом хранилище, используя путь UNC, а текущий каталог — C:\Windows
. Откройте окно командной строки и введите полное имя пакетного файла, используя дополнение имени файла cmd.exe
, и нажмите ВОЙТИ, и текущий каталог, скорее всего, %USERPROFILE%
.
@AshSalhan Я пишу пакетные файлы, работающие с по дизайну, а не с случайно. Пакетные файлы, написанные мной, не зависят от свойств среды выполнения, определенных вне пакетного файла, поскольку это делает его непредсказуемым: пакетный файл всегда работает во всех возможных средах выполнения, а не только случайно в наиболее распространенной среде выполнения. В Stack Overflow ежедневно задают вопросы люди, которые спрашивают, почему пакетный файл не работает в случае использования X (запускается от имени администратора, в качестве запланированной задачи, службой, с путем UNC, ...), хотя он отлично работает при двойном щелчке. .
Спасибо, Mofi, я не смогу попробовать это до конца этой недели, но я намерен упаковать это с помощью программы ASU64.exe, и пока они оба находятся в одной папке, это должно работать. Я попробовал это на своем ноутбуке, и это работает. Хотя он, естественно, потерпит неудачу, поскольку не сможет найти введенный IP-адрес.