我正在编写一个简单的批处理文件,以帮助用户从笔记本电脑移至新VDI机器时迁移其数据。
我一直为他们提供两个批处理文件。一种在便携式计算机上运行(DataUploader.bat),另一种在他们登录VDI计算机上运行(DataDownloader.bat)
我希望我可以使用一个批处理文件来简化此过程。我正在考虑进行主机名检查,因为他们的所有便携式计算机名称都以相同的3个字母开头,而他们的VDI计算机都以相同的3个字母开头。
例如...
如果主机名以批处理文件的PPP GOTO DataDownLoad部分开头
如果主机名以批处理文件的VVV GOTO DataUpload部分开头
我知道我可以将主机名输出到txt文件,但是我很好奇如何使用批处理文件来查看该文本,而仅使用前三个字符转到批处理文件中的特定步骤。
除了使用主机名之外,我还接受其他任何创意解决方案。
答案 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%