सवाल 64 बिट या 32 बिट ओएस की जांच करने के लिए बैच फ़ाइल


क्या मैं यह देखने के लिए जांच सकता हूं कि वर्तमान मशीन चल रही है या नहीं 64 बिट ओएस या 32 बिट  ओएस एक बैच फ़ाइल के अंदर?

संपादित करें:

मिल गया इस ऑनलाइन और यह अब मेरे लिए काफी अच्छा है:


44
2017-09-07 16:51


मूल


यह तब तक अच्छा है जब तक एक बुरी तरह से पैक किया गया एप्लिकेशन इन फ़ोल्डर्स में से एक बनाता है (32 बिट सिस्टम पर प्रोग्राम फ़ाइलें (x86) \ कहें) और आपकी स्क्रिप्ट विफल हो जाती है (वहां थी) - Adil Hindistan
आप किस उत्तर का उपयोग कर खत्म हो गए? - Seanny123


जवाब:


यह है सही बात माइक्रोसॉफ्ट के नॉलेजबेस संदर्भ के अनुसार चेक करने का तरीका ( http://support.microsoft.com/kb/556009 ) कि मैंने कोड की केवल एक पंक्ति में फिर से संपादित किया है।

यह किसी भी पर्यावरण चर या फ़ोल्डर नामों पर भरोसा नहीं करता है और इसके बजाय रजिस्ट्री में सीधे जांचता है।

जैसा कि नीचे एक पूर्ण बैच फ़ाइल में दिखाया गया है, यह एक पर्यावरण चर सेट करता है ओएस या तो बराबर 32 बिट या 64 बिट कि आप वांछित के रूप में उपयोग कर सकते हैं।

@echo OFF

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT echo This is a 32bit operating system
if %OS%==64BIT echo This is a 64bit operating system

57
2017-07-05 21:09



यह जानकारी पहले प्रदान की गई थी यह जवाब, लेकिन मुझे आपके कार्यान्वयन को बेहतर पसंद है क्योंकि यह परिणाम रखने के लिए मध्यवर्ती फ़ाइल का उपयोग नहीं करता है। - Ken White
आपने भी एक बग बनाया है - अगर होना चाहिए find /i "x86", "x32" जैसी कोई चीज़ नहीं है) - mikalai
साथ ही, आप शायद अपने पर्यावरण चर के रूप में ओएस का उपयोग नहीं करना चाहते हैं क्योंकि यह पहले से ही विंडोज़ द्वारा सेट है। मेरी मशीन पर 'ओएस = विंडोज_एनटी' - Adisak
यह एंड्रॉइड एसडीके उपकरण का उपयोग करता है। देख android.googlesource.com/platform/sdk/+/master/find_java/... - Tim Kist
डाल setlocal ठीक बाद के बाद @echo off लाइन - यह सुनिश्चित करेगा कि पर्यावरण का जीवनकाल बैच को समाप्त करने के साथ खत्म हो जाएगा, इसलिए ओएस चर का उपयोग करने से नुकसान नहीं पहुंचाया जाना चाहिए। - Matt


मैं निम्न में से किसी एक का उपयोग करता हूं:

:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT)

:64BIT
echo 64-bit...
GOTO END

:32BIT
echo 32-bit...
GOTO END

:END

या मैंने सेट किया bit परिवर्तनीय, जिसे मैंने बाद में सही सेटअप चलाने के लिए अपनी स्क्रिप्ट में उपयोग किया।

:CheckOS
IF EXIST "%PROGRAMFILES(X86)%" (set bit=x64) ELSE (set bit=x86)

या ...

:CheckOS
IF "%PROCESSOR_ARCHITECTURE%"=="x86" (set bit=x86) else (set bit=x64)

उम्मीद है की यह मदद करेगा।


38
2017-10-30 16:54



यह अच्छा है, लेकिन मैं उपयोग करना पसंद करता हूं IF DEFINED ProgramFiles(x86) ... - paddy
किसी ने भी बैच का आविष्कार किया है यदि / और कथन ... मैंने कभी ऐसा ट्रिब्रिबल दुभाषिया नहीं देखा है। - Mgamerz
के लिए आपका परीक्षण नहीं है %PROCESSOR_ARCHITECTURE% गलत रास्ता चारों ओर? मुझे मिला AMD64 64-बिट पर अगर %PROCESSOR_ARCHITECTURE% हमेशा काम करता है तो यह एक है बहुत एक निर्देशिका की जांच करने से बेहतर समाधान है कि सॉफ़्टवेयर का कोई भी बग़ी टुकड़ा सीपीयू के बावजूद बना सकता है। - Rory
एक बग देखा - सकारात्मक और नकारात्मक शाखाओं का आदान-प्रदान करना चाहिए IF "%PROCESSOR_ARCHITECTURE%"=="x86" (set bit=x64)। - mikalai
@Mgamerz यकीन है कि यह आदर्श से बहुत दूर है, लेकिन ध्यान दें कि बैच स्क्रिप्ट (और स्वच्छता के लिए, अलग-अलग आदेशों को लाइनों के जरिए अलग-अलग कमांड कर सकते हैं, जिसमें / अन्य ब्लॉक के भीतर, जब तक उद्घाटन ब्रैकेट शर्त के समान रेखा पर हो , यह चीजों को और अधिक पठनीय बनाता है - उपलब्ध सीमाओं के भीतर! - underscore_d


काम करने लगता है अगर आप केवल इन करते हैं:

echo "%PROCESSOR_ARCHITECTURE%"

मुझे मिल गया है ये लिपि जो ओएस आर्किटेक्चर (x64 या x86) के आधार पर विशिष्ट सामग्री करेगा:

@echo off
echo Detecting OS processor type

if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto 64BIT
echo 32-bit OS
\\savdaldpm01\ProtectionAgents\RA\3.0.7558.0\i386\DPMAgentInstaller_x86 /q
goto END
:64BIT
echo 64-bit OS
\\savdaldpm01\ProtectionAgents\RA\3.0.7558.0\amd64\DPMAgentInstaller_x64 /q
:END

"C:\Program Files\Microsoft Data Protection Manager\DPM\bin\setdpmserver.exe" -dpmservername sa

कृपया बिना किसी रास्ता खोजने का प्रयास करें ...

यूनिक्स सिस्टम के साथ काम करने वाले लोगों के लिए, uname -m चाल करेगा।


22
2017-09-07 16:54



नहीं, केवल संस्करण संख्या और 64 या 32 नहीं बता सकते हैं। - 5YrsLaterDBA
मेरा संपादित उत्तर देखें। - ThierryB
@ 5YrsLaterDBA: यदि आपके पास विशिष्ट आवश्यकताएं हैं तो आपको उन्हें अपने प्रश्न में रखना होगा। आपके द्वारा वास्तव में पूछे गए प्रश्न के दो सही उत्तर हैं। आपको एक स्वीकार करना चाहिए और दोनों को ऊपर उठाना चाहिए। - Carey Gregory


*** Start ***

@echo off

Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0

REG.exe Query %RegQry% > checkOS.txt

Find /i "x86" < CheckOS.txt > StringCheck.txt

If %ERRORLEVEL% == 0 (
    Echo "This is 32 Bit Operating system"
) ELSE (
    Echo "This is 64 Bit Operating System"
)

*** End ***

संदर्भ http://support.microsoft.com/kb/556009


5
2017-11-06 04:41





कमांड प्रॉम्प्ट में नीचे चलाएं:

प्रारंभ करें -> चलाएं -> टाइप करें cmd और परिणामी ब्लैक बॉक्स में नीचे दिए गए कमांड को दर्ज करें:

wmic os get osarchitecture

4
2018-01-20 05:54



क्या मुझे सिर्फ एक कारण मिल सकता है कि इसमें 2 डाउनवॉट क्यों हैं? मैं जानना चाहता हूं कि यह जवाब सहायक क्यों नहीं है - Emil Reña Enriquez
डाउनवॉट्स के कारण पर अनुमान लगाने का अनुमान यह है कि दिशा कमांड प्रॉम्प्ट से कमांड को चलाने के लिए है, निर्देशों के लिए निर्देश नहीं है और फिर बैच फ़ाइल में कमांड के आउटपुट का उपयोग करें, जैसा सवाल पूछता है। - user66001
मुझे लगता है कि मूल प्रश्न कुछ ऐसा करने की उम्मीद कर रहा था जो बैच फ़ाइल में काम करेगा, उदा। wmic os get osarchitecture | find "64" > NUL && set NumBits=64 || set NumBits=32  अन्यथा, मुझे लगता है कि यह सबसे संक्षिप्त उत्तर है ... प्रदान किया गया wmic हमेशा पथ पर मौजूद है .... - Steven the Easily Amused


'प्रोग्रामफाइल (x86)' विंडोज 64-बिट मशीनों पर cmd.exe (32-बिट और 64-बिट संस्करण दोनों) द्वारा स्वचालित रूप से परिभाषित एक पर्यावरण चर है, इसलिए इसे आज़माएं:

@ECHO OFF

echo Check operating system ...
if defined PROGRAMFILES(X86) (
    echo 64-bit sytem detected
) else (
    echo 32-bit sytem detected
)
pause

3
2017-11-11 08:42



यह एक सम्मोहन की तरह काम करता है! Win7 और Vista (x86 और x64) पर परीक्षण किया गया। बस ध्यान रखें कि यदि आपको WOW64 को संभालने की आवश्यकता है, तो PROCESSOR_ARCHITEW6432 (विवरण - goo.gl/tWDK3V) - Alex Klaus


PROCESSOR_ARCHITECTURE=x86

Win32, और पर दिखाई देगा

PROCESSOR_ARCHITECTURE=AMD64

Win64 के लिए दिखाई देगा।

यदि आप 32-बिट को उलट कर रहे हैं cmd.exe प्रक्रिया तब विंडोज दो पर्यावरण चर प्रस्तुत करता है:

PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64

3
2017-09-07 16:55



कमांड लाइन कमांड के साथ बैच फ़ाइल में उन जानकारी को कैसे प्राप्त करें? - 5YrsLaterDBA
@ 5YrsLaterDBA कम से कम विषय पर शोध करने का प्रयास करें: computerhope.com/if.htm - Steve-o
@ जॉय मैं नाटक कर रहा हूं यह ओरेकल, ला ला ला एचपी की तरह मौजूद नहीं है - मैं आपको नहीं सुन सकता! - Steve-o
इस चर पर अधिक उपयोगी जानकारी और यह Win32 / Win64 / WOW64 पर कैसे कार्य करती है: blogs.msdn.com/b/david.wang/archive/2006/03/26/... - the_mandrill
यह केवल आपके द्वारा उपयोग किए जा रहे कमांड शैल के गद्दे का पता लगाता है, न कि ओएस के। के दो संस्करण हैं cmd.exe 64-बिट विंडोज़ पर, एक 64-बिट है और एक 32-बिट है (आप आमतौर पर इसे यहां ढूंढ सकते हैं: C:\Windows\SysWOW64\cmd.exe)। - Igor Brejc


यहां मेरा निजी पसंदीदा, एक तार्किक बम है :)

::32/64Bit Switch
ECHO %PROCESSOR_ARCHITECTURE%|FINDSTR AMD64>NUL && SET ARCH=AMD64 || SET ARCH=x86
ECHO %ARCH%
PAUSE

एंड के साथ (&&) और ओआरएस (||) यह है एक IF THEN ELSE बैच का निर्माण।


1
2018-02-28 07:32



उन लोगों के लिए जो सोचते थे कि क्यों सीधा अगर काम नहीं करेगा; forums.codeguru.com/... एक परेशानी मैंने देखा है कि आईएफ ब्लॉक के भीतर किए गए असाइनमेंट (यानी एसईटी स्टेटमेंट) आईएफ-बॉक के बाद तक महसूस नहीं किए जाते हैं। तो, दूसरे शब्दों में, आप एक आईएफ-ब्लॉक के भीतर परिवर्तनीय असाइनमेंट पर भरोसा नहीं कर सकते हैं। - AnneTheAgile
यदि प्रक्रिया 32-बिट मोड में चल रही है, तो% PROCESSOR_ARCHITECTURE% 64-बिट मशीन पर x86 लौटाता है। जैसे यदि आप भीतर भागते हैं c:\windows\syswow64\cmd.exe तो यह x86 आउटपुट करता है। आप निरीक्षण कर सकते हैं %PROCESSOR_ARCHITEW6432% इस मामले में जो AMD64 होगा। - Rory
@AnneTheAgile मुझे यकीन नहीं है कि उस लिंक से आपका निष्कर्ष सटीक है; देख stackoverflow.com/questions/7805510/... अन्य सशर्त नुकसान के उदाहरण के लिए जो किसी को बना सकता है सोच उस। एक और संभावित रूप से प्रासंगिक बात है setlocal enabledelayedexpansion - जो मैं वैसे भी एक प्रतिबिंब के रूप में उपयोग करते हैं। - underscore_d


बहुत परीक्षण और त्रुटि के बाद, मैंने कुछ अलग-अलग कामकाजी उदाहरण प्राप्त करने में कामयाब रहे, लेकिन किकर तब था जब बैच 32 बिट सीएमडी पर 64 बिट ओएस पर लॉन्च किया गया था। अंत में यह काम करने के लिए सबसे आसान चेक था, जो Win2k-Win8 32/64 पर काम करता है। फिल के लिए भी बहुत बड़ा धन्यवाद जिन्होंने मुझे इस में मदद की।

set bit64=n
if /I %Processor_Architecture%==AMD64 set bit64=y
if /I "%PROCESSOR_ARCHITEW6432%"=="AMD64" set bit64=y

1
2017-12-02 22:26





यदि स्क्रिप्ट प्रशासक के अंतर्गत चलने में सक्षम हो, तो यह wmi कमांड का उपयोग कर सकता है।

FOR /f "tokens=2 delims==" %%f IN ('wmic os get osarchitecture /value ^| find "="') DO SET "OS_ARCH=%%f"
IF "%OS_ARCH%"=="32-bit" GOTO :32bit
IF "%OS_ARCH%"=="64-bit" GOTO :64bit

ECHO OS Architecture %OS_ARCH% is not supported!
EXIT 1

:32bit
ECHO "32 bit Operating System"
GOTO :SUCCESS

:64bit
ECHO "64 bit Operating System"
GOTO :SUCCESS

:SUCCESS
EXIT 0

1
2018-03-14 05:07





यहां कोई भी जवाब मेरे मामले में काम नहीं कर रहा था (64 बिट प्रोसेसर लेकिन 32 बिट ओएस), तो यहां समाधान है जो मेरे लिए काम करता है:

(set | find "ProgramFiles(x86)" > NUL) && (echo "%ProgramFiles(x86)%" | find "x86") > NUL && set bits=64 || set bits=32

0
2017-10-16 16:48



डाउनवोट क्यों? क्या यह काम नहीं करता है? - teh_senaus