我可以使批处理文件执行基于主机名的特定命令吗?

时间:2019-01-23 19:01:32

标签: batch-file cmd

我正在编写一个简单的批处理文件,以帮助用户从笔记本电脑移至新VDI机器时迁移其数据。

我一直为他们提供两个批处理文件。一种在便携式计算机上运行(DataUploader.bat),另一种在他们登录VDI计算机上运行(DataDownloader.bat)

我希望我可以使用一个批处理文件来简化此过程。我正在考虑进行主机名检查,因为他们的所有便携式计算机名称都以相同的3个字母开头,而他们的VDI计算机都以相同的3个字母开头。

例如...

如果主机名以批处理文件的PPP GOTO DataDownLoad部分开头

如果主机名以批处理文件的VVV GOTO DataUpload部分开头

我知道我可以将主机名输出到txt文件,但是我很好奇如何使用批处理文件来查看该文本,而仅使用前三个字符转到批处理文件中的特定步骤。

除了使用主机名之外,我还接受其他任何创意解决方案。

2 个答案:

答案 0 :(得分:1)

首先,我们将使用Windows内置环境变量%COMPUTERNAME%来获取主机名 PC名称。从这里开始,如果您只想获取示例的前3个字符,请单击此处。 123-Johns-PC-我们可以使用称为variable-substring的工具,通过以下命令,我们只能提取前三个字符:

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 /?

答案 1 :(得分:0)

请确保在主机名上执行区分大小写的代码。

@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%