Можно ли заставить командный файл выполнить определенную команду на основе имени хоста? - PullRequest
0 голосов
/ 23 января 2019

Я пишу простой пакетный файл, чтобы помочь пользователям перенести свои данные при переходе с ноутбука на новый компьютер с VDI.

Я предоставляю им два пакетных файла. Один для запуска на своем ноутбуке (DataUploader.bat) и один для запуска после входа в систему на своем компьютере с VDI (DataDownloader.bat)

Я надеюсь, что смогу использовать один пакетный файл для упрощения процесса. Я думал о том, чтобы выполнить проверку имени хоста, поскольку все имена их ноутбуков начинаются с одной и той же 3-х букв, а все их машины VDI начинаются с одинаковых трех букв.

Например ...

Если имя хоста начинается с раздела PPP GOTO DataDownLoad командного файла

Если имя хоста начинается с секции VVV GOTO DataUpload командного файла

Я знаю, что мог бы вывести имя хоста в текстовый файл, но мне любопытно, как я мог бы использовать пакетный файл для просмотра этого текста и использовать только первые три символа, чтобы ПОЛУЧИТЬ определенный шаг в пакетном файле.

Я также открыт для любых других творческих решений, которые могут быть у любого, кроме имени хоста.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Обязательно вводите код хоста без учета регистра.

@ECHO OFF
SET "EXITCODE=0"
SET "MACHINE_TYPE=%COMPUTERNAME:~0,3%

IF /I %MACHINE_TYPE == VVV (
    ECHO This is a VVV machine
    SET "EXITCODE=%ERRORLEVEL%"
    GOTO TheEnd
)

IF /I %MACHINE_TYPE" == PPP (
    ECHO This is a VVV machine
    SET "EXITCODE=%ERRORLEVEL%"
    GOTO TheEnd
)

ECHO On machine %COMPUTERNAME%, MACHINE_TYPE %MACHINE_TYPE% is not recognized.
SET "EXITCODE=1"

:TheEnd
EXIT /B %EXITCODE%
0 голосов
/ 23 января 2019

Прежде всего, мы будем использовать встроенную в Windows переменную окружения %COMPUTERNAME%, чтобы получить имя хоста или имя ПК .Отсюда, если вы хотите взять только первые 3 примера примера;123-Johns-PC - мы можем использовать то, что называется variable-substring , что позволит нам извлечь только первые 3 символа, используя следующие команды:

Set "Host=%Computername%"
Set "Host=%Host:~0,3%"

Для использования оператора IFВы хотите отформатировать его следующим образом для сравнения, если две строки равны:

If "%Host%"=="PPP" (Goto Function) Else (Echo PPP Was Not Found!)

ExecuteCommandBasedOnHostname.bat:

@echo off

Rem | Gather First Three Characters Of Hostname; Save As String
Set "Host=%Computername%"
Set "Host=%Host:~0,3%"

Rem | Compare Modified Hostname String; Redirect
If "%Host%"=="PPP" (Goto DataDownLoad)
If "%Host%"=="VVV" (Goto DataUpload)

Echo ERROR: Hostname Does Not Match Database.
Echo(
pause

goto :EOF

:DataDownLoad

Rem | DataDownLoad Script Here




Goto :EOF

:DataUpload

Rem | DataUpload Script Here




Goto :EOF

Я быНастоятельно рекомендуем вам взглянуть на некоторые из следующих команд в командной строке, чтобы узнать больше об их операциях и функциях.Я оставил несколько Rem комментариев в сценарии, чтобы помочь вам в этом.

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