Soru 64 bit veya 32 bit işletim sistemini kontrol etmek için toplu iş dosyası


Mevcut makinenin çalışıp çalışmadığını kontrol edebilir miyim 64bit OS veya 32bit  işletim sistemi bir toplu iş dosyasının içinde?

DÜZENLE:

Bulunan bu online ve şu anda bana yeterince iyi:


44
2017-09-07 16:51


Menşei


Kötü paketlenmiş bir uygulama bu klasörlerden birini (32 bit sistemdeki Program Dosyaları (x86) \) ve komut dosyanız başarısız olduğunda - Adil Hindistan
Hangi cevabı kullanarak yaptın? - Seanny123


Cevaplar:


Bu doğru Microsoft'un bilgi tabanı referansına göre kontrol gerçekleştirme yolu http://support.microsoft.com/kb/556009 ) sadece tek bir kod satırına yeniden düzenledim.

Herhangi bir ortam değişkenine veya klasör adına güvenmez ve bunun yerine doğrudan kayıt defterinde denetler.

Tam bir toplu iş dosyasında gösterildiği gibi bir ortam değişkeni ayarlar işletim sistemi ya eşit 32BIT veya 64BIT İstediğiniz şekilde kullanabilirsiniz.

@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



Bu bilgi daha önce verilmiştir. bu cevapAncak, uygulamanızı daha iyi beğeniyorum çünkü sonuçları tutmak için bir ara dosya kullanmıyor. - Ken White
Sen de bir hata yaptın - eğer olsaydın find /i "x86""x32" diye bir şey yoktur - mikalai
Ayrıca, işletim sistemini zaten ortam değişkeniniz olarak kullanmak istemiyorsunuz çünkü bu zaten Windows tarafından ayarlanmış. Makinemde 'OS = Windows_NT' - Adisak
Android SDK araçlarının kullandığı şey bu. Görmek android.googlesource.com/platform/sdk/+/master/find_java/... - Tim Kist
Koymak setlocal hemen sonra @echo off hat - bu, ortamın ömrünün sona ermesiyle sona erecek, dolayısıyla toplu işleyişin kullanılması, OS değişkeninin zarar vermemesi için kullanılmalıdır. - Matt


Aşağıdakilerden birini kullanıyorum:

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

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

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

:END

ya da ben bit Daha sonra, doğru kurulumu çalıştırmak için betiğimde kullanacağım değişken.

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

veya...

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

Bu yardımcı olur umarım.


38
2017-10-30 16:54



Bu iyi, ama kullanmayı tercih ederim IF DEFINED ProgramFiles(x86) ... - paddy
Kimler if / else ifadeleri toplu icat etti ... Ben hiç böyle bir TERRIBLE yorumcusu görmedim. - Mgamerz
Senin sınavın değil %PROCESSOR_ARCHITECTURE% yanlış yoldan mı? alırım AMD64 64-bit'de. Eğer %PROCESSOR_ARCHITECTURE% her zaman çalışır, o zaman çok herhangi bir yazılım parçasının CPU'dan bağımsız olarak oluşturabileceği bir dizinin kontrol edilmesinden daha iyi bir çözüm. - Rory
Bir hata tespit ettim - olumlu ve olumsuz dalları değişmeli IF "%PROCESSOR_ARCHITECTURE%"=="x86" (set bit=x64). - mikalai
@Mgamerz elbette, ideal olmaktan çok uzaktır, ancak toplu betiklerin komut satırları ile aynı satırda olduğu sürece, toplu komut dosyalarının komut satırlarını, / else blokları dahil olmak üzere, satırlarla ayırdıklarını unutmayın. Bu, işlerin çok daha okunabilir olmasını sağlar - mevcut sınırlar dahilinde! - underscore_d


Sadece bunları yaparsanız işe yarar:

echo "%PROCESSOR_ARCHITECTURE%"

buldum bu komut dosyası OS Mimarisine (x64 veya x86) göre belirli şeyler yapacaklar:

@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

GOTO olmadan bir yol bulmaya çalış lütfen ...

Unix sistemleri ile çalışan insanlar için uname -m hile yapacak.


22
2017-09-07 16:54



Hayır, sadece sürüm numarası ve 64 veya 32 söyle. - 5YrsLaterDBA
benim düzenlenmiş cevabımı gör. - ThierryB
@ 5YrsLaterDBA: Özel gereksinimleriniz varsa bunları sorunuza eklemeniz gerekir. Aslında sorduğun soruya iki doğru cevabın var. İkisini de kabul etmeli ve ikisini de kabul etmelisiniz. - 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 ***

referans http://support.microsoft.com/kb/556009


5
2017-11-06 04:41





Komut isteminde aşağıdakini çalıştırın:

Başlat -> Çalıştır -> Türü cmd ve aşağıdaki kara kutuya aşağıdaki komutu girin:

wmic os get osarchitecture

4
2018-01-20 05:54



Bunun neden 2 indirimi olduğuna dair bir sebep alabilir miyim? Bu cevabın neden yararlı olmadığını bilmek isterim - Emil Reña Enriquez
Tahmininin nedeni hakkında bir tahminde bulunmak, yön komutun komut isteminden çalıştırılması, komutun komutunun çıktısını almaması ve komutun çıktısını bir toplu iş dosyasında kullanmaktır. - user66001
Asıl sorunun bir Toplu iş dosyasında çalışacak bir şey beklediğini düşünüyorum. wmic os get osarchitecture | find "64" > NUL && set NumBits=64 || set NumBits=32  Aksi halde, bunun en özlü cevap olduğunu düşünüyorum. wmic her zaman yolda mevcut .... - Steven the Easily Amused


'ProgramFiles (x86)', sadece Windows 64-bit makinelerde cmd.exe (hem 32 bit hem de 64 bit sürümleri) tarafından otomatik olarak tanımlanan bir ortam değişkendir, bu yüzden şunu deneyin:

@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



Bir çekicilik gibi çalışır! Win7 ve Vista'da test edildi (x86 ve x64). WOW64 işlemek için gerekirse, ayrıca PROCESSOR_ARCHITEW6432'yi de kontrol etmeyi unutmayın (ayrıntılar - goo.gl/tWDK3V) - Alex Klaus


PROCESSOR_ARCHITECTURE=x86

Win32’de görünür ve

PROCESSOR_ARCHITECTURE=AMD64

Win64 için görünecektir.

Eğer 32-bit'i koşturuyorsanız cmd.exe Süreç, Windows iki ortam değişkenini sunar:

PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64

3
2017-09-07 16:55



Bu bilgiyi komut satırı komutları ile toplu iş dosyasında nasıl edinebilirim? - 5YrsLaterDBA
@ 5YrsLaterDBA en azından konuyu araştırmayı deneyin: computerhope.com/if.htm - Steve-o
@Joey gibi davranıyorum, Oracle gibi yok, la la la HP - Seni duyamıyorum! - Steve-o
Bu değişkenle ilgili daha yararlı bilgiler ve Win32 / Win64 / WOW64'te nasıl davranıldığı: blogs.msdn.com/b/david.wang/archive/2006/03/26/... - the_mandrill
Bu sadece işletim sisteminin kendisinin değil, kullandığınız komut kabuğunun bititesini algılar. İki versiyonu vardır cmd.exe 64-bit Windows, bir 64-bit ve bir 32-bit (genellikle burada bulabilirsiniz: C:\Windows\SysWOW64\cmd.exe). - Igor Brejc


İşte benim kişisel favorim, mantıklı bir bomba :)

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

AND ile (&&) ve OR’lar (||) bu bir IF THEN ELSE Toplu Yapı.


1
2018-02-28 07:32



Düz bir if-else'in neden işe yaramayacağını merak edenler için; forums.codeguru.com/... Fark ettiğim bir sıkıntı, bir IF bloğu içinde yapılan ödevlerin (yani SET ifadeleri) IF-bock SONRASI olana kadar gerçekleşmemesidir. Yani, başka bir deyişle, IF blok içinde değişken atamaya güvenemezsiniz. - AnneTheAgile
İşlem 32 bit modunda çalışıyorsa% PROCESSOR_ARCHITECTURE%, 64 bit makinede x86 değerini döndürür. Örneğin. eğer içeri girersen c:\windows\syswow64\cmd.exe daha sonra x86 çıktı. Denetleyebilirsiniz %PROCESSOR_ARCHITEW6432% Bu durumda AMD64 olacak. - Rory
@AnneTheAgile Bu bağlantıdan sonuçlarınızın doğru olduğundan emin değilim; görmek stackoverflow.com/questions/7805510/...Birini yaratabilecek diğer şartlı tuzakların bir örneği için düşünmek söyledi. Bir başka olası şey ise setlocal enabledelayedexpansion - yine de refleks olarak kullanıyorum. - underscore_d