如何创建注释 windows 版本的批处理文件,然后使用 xml 文件导入任务

How to create batch file noting windows version then use xml file to import task

我正在寻找一种方法来让批处理文件导入名为 Task Kill 的计划任务。 我 运行 遇到了不同操作系统的问题,需要多个计划任务 xml 文件,一个用于 Windows 7,另一个用于 Windows 10。 我希望有一个批处理文件,可以查看它是 Windows 7 还是 Windows 10,然后使用适当的 XML 文件。

我没有尝试任何操作,因为我不确定如何查看操作系统类型

schtasks /create /tn "Task Kill WebCat Server" /XML "%~dp0Task Kill.xml"

这是正在使用的 XML 文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task" version="1.4">
    <RegistrationInfo>
        <Date>2019-06-06T09:12:27.4239747</Date>
        <Author>Support</Author>
        <URI>\Task Kill</URI>
    </RegistrationInfo>
    <Triggers>
        <CalendarTrigger>
            <StartBoundary>2019-06-06T06:00:00</StartBoundary>
            <Enabled>true</Enabled>
            <ScheduleByDay>
                <DaysInterval>1</DaysInterval>
            </ScheduleByDay>
        </CalendarTrigger>
    </Triggers>
    <Principals>
        <Principal id="Author">
            <UserId>S-1-5-18</UserId>
            <RunLevel>HighestAvailable</RunLevel>
        </Principal>
    </Principals>
    <Settings>
        <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
        <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
        <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
        <AllowHardTerminate>true</AllowHardTerminate>
        <StartWhenAvailable>false</StartWhenAvailable>
        <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
        <IdleSettings>
            <StopOnIdleEnd>true</StopOnIdleEnd>
            <RestartOnIdle>false</RestartOnIdle>
        </IdleSettings>
        <AllowStartOnDemand>true</AllowStartOnDemand>
        <Enabled>true</Enabled>
        <Hidden>false</Hidden>
        <RunOnlyIfIdle>false</RunOnlyIfIdle>
        <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
        <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
        <WakeToRun>true</WakeToRun>
        <ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
        <Priority>7</Priority>
    </Settings>
    <Actions Context="Author">
        <Exec>
            <Command>"C:\Program Files (x86)\MAM Software\VAST\KillWebcat.bat"</Command>
        </Exec>
    </Actions>
</Task>

导入此文件时,它仅适用于 Windows 10,不适用于 Windows 7。

使用 VER 命令会提供所需的内容吗?

FOR /F "delims=" %%v IN ('VER') DO ( SET "VERSION=%%~v" )
ECHO %VERSION%

如果可以使用单个 XML 文件就更好了。

以下是一个批处理文件,它将确定您的操作系统是 Windows 7 还是 Windows 10。只需将 Echo 消息替换为您需要的命令即可。

@Echo Off
For /F "EOL=O Delims=" %%A In (
    '"WMIc OS Get OSArchitecture,ProductType,Version 2>Nul"'
) Do For /F "Tokens=1,3-5 Delims=-. " %%B In ("%%A"
) Do If %%C Equ 1 Call :v%%D%%Ex%%B 2>Nul
Pause
Exit/B

:v61x32
Echo Windows 7 x86 Commands
GoTo :EOF

:v61x64
Echo Windows 7 x64 Commands
GoTo :EOF

:v100x32
Echo Windows 10 x86 Commands
GoTo :EOF

:v100x64
Echo Windows 10 x64 Commands
GoTo :EOF

如果操作系统的 'bitness' 无关紧要,那么您可以改用它:

@Echo Off
For /F "EOL=O Delims=" %%A In (
    '"WMIc OS Get OSArchitecture,ProductType,Version 2>Nul"'
) Do For /F "Tokens=1,3-5 Delims=-. " %%B In ("%%A"
) Do If %%C Equ 1 Call :v%%D%%Ex%%B 2>Nul
Pause
Exit/B

:v61x32
:v61x64
Echo Windows 7 Commands
GoTo :EOF

:v100x32
:v100x64
Echo Windows 10 Commands
GoTo :EOF

请注意,在这两种情况下,包含 Pause 命令只是为了让您阅读 Echo 消息,您可能会发现在替换Echo使用您自己的命令更适合您的目的。