Что-то не так с моим сценарием, но я не знаю, что - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь создать пакетный скрипт, который будет загружать файл на основе ОС и архитектуры компьютера.Моя единственная проблема - всякий раз, когда я запускаю командный файл, он закрывается после проверки того, какую архитектуру использует компьютер.Я чувствую, что это оператор if внутри другого оператора if, но я не уверен.(Кроме того, я знаю, что в нем конкретно сказано, что у него нет расплывчатого заголовка, но я не был уверен, что будет лучше.)

Я намереваюсь иметь переносную программу, которая запускает исполняемый файл и запускаеткогда файл отсутствует.Я пробовал разные способы проверки ОС и пытался переставить операторы if, но пока ничего не получалось.

setlocal
for /f "tokens=4-5 delims=. " %%i in ('ver') do set WINOS=%%i.%%j
reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /I "x86" > NUL && set ARCHCHECK=32BIT || set ARCHCHECK=64BIT
if %WINOS%==10.0 (
   if %ARCHCHECK%==32BIT (
      echo You are running Windows 10 on a 32 Bit architecture. Getting right files.
      powershell -Command "IInvoke-WebRequest https://example.com/example.zip -OutFile example.zip"
   if %ARCHCHECK%==64BIT (
      echo You are running Windows 10 on a 64 Bit architecture. Getting right files.
      powershell -Command "Invoke-WebRequest https://example.com/example.zip -OutFile example.zip"
if %WINOS%==6.1 (
   if %ARCHCHECK%==32BIT (
      echo You are running Windows 7 on a 32 Bit architecture. Getting right files.
      powershell -Command "(New-Object Net.WebClient).DownloadFile('https://example.com/example.zip', 'example.zip')"
   if %ARCHCHECK%==64BIT (
      echo You are running Windows 7 on a 64 Bit architecture. Getting right files.
      powershell -Command "(New-Object Net.WebClient).DownloadFile('https://example.com/example.zip', 'example.zip')"

И так далее для Windows 8

Я ожидаюдля пакетного сценария найти ОС (чтобы узнать, какую команду powershell использовать), затем архитектуру (чтобы узнать, какую версию нужно загрузить), а затем выполнить команду загрузки.Что на самом деле происходит, так это то, что сценарий будет выполняться вплоть до запроса реестра, а затем, прежде чем он начнет работать с операторами if, он останавливается и закрывает окно.

1 Ответ

0 голосов
/ 30 декабря 2018

Вот метод выполнения ваших проверок с использованием WMIC и GoTO:

@Echo Off
Set "MJ="
Set "MN="
For /F "EOL=O Delims=" %%A In ('"WMIc OS Get OSArchitecture,Version 2>Nul"'
) Do For /F "Tokens=1,3-4 Delims=-. " %%B In ("%%A"
) Do Set/A "OA=%%B, MJ=%%C, MN=%%D"
If Not Defined MN (If Not Defined MJ (Echo Unsupported OS&Pause&Exit/B) Else (
    Set/A MJ=5, MN=1))
Call :v%MJ%%MN%x%OA%
Pause
Exit/B

:v51x32
Echo Windows XP, Whistler Server x%OA% Commands
GoTo :EOF

:v51x64
Echo Windows XP, Whistler Server x%OA% Commands
GoTo :EOF

:v52x32
Echo Windows NET Server, Home Server, Server 2003 x%OA% Commands
GoTo :EOF

:v52x64
Echo Windows NET Server, Home Server, Server 2003 x%OA% Commands
GoTo :EOF

:v60x32
Echo Windows Longhorn, Vista, Server 2008 x%OA% Commands
GoTo :EOF

:v60x64
Echo Windows Longhorn, Vista, Server 2008 x%OA% Commands
GoTo :EOF

:v61x32
Echo Windows 7, Server 2008 R2, Home Server 2011 x%OA% Commands
GoTo :EOF

:v61x64
Echo Windows 7, Server 2008 R2, Home Server 2011 x%OA% Commands
GoTo :EOF

:v62x32
Echo Windows 8, Server 2012 x%OA% Commands
GoTo :EOF

:v62x64
Echo Windows 8, Server 2012 x%OA% Commands
GoTo :EOF

:v63x32
Echo Windows 8.1, Server 2012 R2 x%OA% Commands
GoTo :EOF

:v63x64
Echo Windows 8.1, Server 2012 R2 x%OA% Commands
GoTo :EOF

:v100x32
Echo Windows 10, Server 2016 x%OA% Commands
GoTo :EOF

:v100x64
Echo Windows 10, Server 2016 x%OA% Commands
GoTo :EOF

. Вы можете заменить Echo команды или добавить свои конкретные команды между ними и их соответствующими * 1007.* s.

Надеюсь, это поможет!

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