【问题标题】:Can I make a batch file execute a specific command based on hostname?我可以让批处理文件根据主机名执行特定命令吗?
【发布时间】:2019-01-23 19:01:31
【问题描述】:

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

我一直在为他们提供两个批处理文件。一个在他们的笔记本电脑上运行(DataUploader.bat),一个在他们登录到他们的 VDI 机器后运行(DataDownloader.bat)

我希望我可以使用一个批处理文件来简化流程。我正在考虑进行主机名检查,因为他们所有的笔记本电脑机器名称都以相同的 3 个字母开头,而他们的 VDI 机器都以相同的三个字母开头。

例如...

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

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

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

我也愿意接受除使用主机名之外的任何其他创造性解决方案。

【问题讨论】:

标签: batch-file cmd


【解决方案1】:

首先,我们将使用 windows 内置环境变量%COMPUTERNAME% 来获取 主机名PC 名。从这里开始,如果您只想获取示例的前 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 cmets 来帮助您。

  • call /?
  • set /?
  • if /?
  • goto /?

【讨论】:

  • 感谢您花时间写这篇文章。很有帮助。正是我需要的。我只是在学习一些更高级的功能,因此有一个特定于我的用例的示例可供学习是非常有益的。再次感谢!
【解决方案2】:

确保在主机名上使用不区分大小写的代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多