Добавление /? переключиться в пакетном режиме? - PullRequest
5 голосов
/ 18 ноября 2011

Кто-нибудь знает, как добавить действие, которое будет запускаться при вызове моего командного файла с аргументом /? ?Я всегда использовал -h для отображения употребления, но на этот раз мне нужен мой -h arg для чего-то другого.

РЕДАКТИРОВАТЬ: На самом деле я пыталсяпарсингом атрибутов, подобных этому

for %%i in (%*) do ....

Но аргумент /? был пропущен, я попробую ваши решения, чтобы увидеть, если он отличается.

Кстати, почему, когдавы разбираете %% i , аргументы /? пропущены?

Ответы [ 4 ]

6 голосов
/ 18 ноября 2011

Кажется, что /? просто пропущен for %%i in (%*), но это универсальная функция цикла for, он пытается найти файл, который соответствует /?, что не удастся.

Вы не можете использовать ? или * в "нормальном" цикле for без изменения результата.

Вы можете использовать команду SHIFT для доступа ко всем вашим параметрам.

:parameterLoop
if "%~1"=="/?" call :help
if "%~1"=="-h" call :help
if "%~1"=="-o" call :other
shift
if not "%~1"=="" goto :parameterLoop

Если вы также хотите отобразить выбранную опцию, у вас возникла проблема с командой echo, так как обычно вместо справки /?.

Вы можете избежать этого, используя echo(%1 вместо echo %1.

3 голосов
/ 18 ноября 2011

Вы проверяете свои аргументы командной строки (% 1,% 2 и т. Д.) По отношению к /? string и если true, выведите справку, используя команду ECHO. Например,

@ECHO OFF
IF "%1"=="/?" (
    ECHO "Help Line 1"
    ECHO "Help Line 2"
) ELSE (
    ECHO "Do Your Action"
)
1 голос
/ 18 ноября 2011

Вы можете попробовать это:

@echo off
if "%1"=="/?" goto print_help
goto normal_start

:print_help
echo Here is your help
goto end

:normal_start
echo I'm working

:end
0 голосов
/ 18 июня 2018

Вот фактический пример использования этих визуальных элементов!

@ECHO OFF

:parameterLoop
IF /I "%1"=="/install" GOTO install
IF /I "%1"=="/uninstall" GOTO uninstall
IF /I "%1"=="/repair" GOTO repair
IF /I "%1"=="" (
    ECHO.
    ECHO Please use the following commands to proceed:
    ECHO.
    ECHO Use /INSTALL to setup the software
    ECHO.
    ECHO Use /UNINSTALL to remove the software
    ECHO.
    ECHO Use /REPAIR to repair the software
    ECHO.
    GOTO end
)

:install
TASKKILL /F /IM vpnui* /T
TASKKILL /F /IM DartOffline* /T
MSIEXEC /I "anyconnect-win-XXX-core-vpn-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /I "anyconnect-win-XXX-dart-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /I "anyconnect-win-XXX-posture-predeploy-k9.msi" /QN /NORESTART
COPY /Y "production.xml" "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\production.xml"
GOTO end

:uninstall
TASKKILL /F /IM vpnui* /T
TASKKILL /F /IM DartOffline* /T
DEL /F /S /Q "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\production.xml"
MSIEXEC /X "anyconnect-win-XXX-core-vpn-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /X "anyconnect-win-XXX-dart-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /X "anyconnect-win-XXX-posture-predeploy-k9.msi" /QN /NORESTART
RMDIR /S /Q "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client"
GOTO end

:repair
TASKKILL /F /IM vpnui* /T
TASKKILL /F /IM DartOffline* /T
DEL /F /S /Q "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\production.xml"
MSIEXEC /X "anyconnect-win-XXX-core-vpn-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /X "anyconnect-win-XXX-dart-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /X "anyconnect-win-XXX-posture-predeploy-k9.msi" /QN /NORESTART
RMDIR /S /Q "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client"
MSIEXEC /I "anyconnect-win-XXX-core-vpn-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /I "anyconnect-win-XXX-dart-predeploy-k9.msi" /QN /NORESTART
MSIEXEC /I "anyconnect-win-XXX-posture-predeploy-k9.msi" /QN /NORESTART
COPY /Y "production.xml" "%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\production.xml"
GOTO end

:end 
EXIT /B

REM Src /7504398/dobavlenie-pereklychitsya-v-paketnom-rezhime

По сути, с помощью этой команды я могу установить свое программное обеспечение с помощью переключателей / install или / uninstall или / repair ... это полезно в intuneи создание пользовательских MSI с помощью AdvancedInstaller!

Также, если вы ничего не печатаете, появляется небольшое меню справки, информирующее пользователя о доступных командах:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...