क्या विंडोज 7/2008 के माध्यम से .BAT फ़ाइल में डिफ़ॉल्ट प्रोग्राम फ़ाइलें फ़ोल्डर को सार्वभौमिक रूप से संबोधित करने का कोई तरीका है?


2

मैं एक बैच फ़ाइल लिखना चाहता हूं, जहां कुछ कमांड Program Filesफ़ोल्डर में आइटमों को लक्षित करते हैं , जो स्वाभाविक रूप से विंडोज एक्सपी से विंडोज 7 एक्स 64 और सर्वर 2008 आर 2 तक क्रॉस-संगत है। हालाँकि, 64-बिट सिस्टम में मुझे जिस फ़ोल्डर का नाम चाहिए होगा Program Files (x86)

क्या कोई बैच कमांड है जो मुझे सिस्टम आर्किटेक्चर का पता लगाने की अनुमति देगा, और उपयुक्त फ़ोल्डर का उपयोग करने के लिए एक IF स्टेटमेंट लिख सकता है? वैकल्पिक रूप से, क्या कोई सार्वभौमिक रूप से लागू वातावरण चर है जो मुझे सही फ़ोल्डर में इंगित करेगा? या, मुझे x86 फ़ोल्डर की तलाश के लिए अपनी स्क्रिप्ट का हिस्सा सेट करना होगा और यदि वर्तमान में है, तो इसका उपयोग केवल अन्य फ़ोल्डर का उपयोग करने के लिए नहीं है?


जवाबों:


1

मुझे यह याद नहीं है कि मुझे यह कहां मिला है, लेकिन आप इसका स्वागत करते हैं। मैंने इसे 32 बिट और 64 बिट विंडोज 7 के लिए जांचने के लिए संशोधित किया। यह काफी आत्म व्याख्यात्मक होना चाहिए।

@echo off

ver | find "2003" > nul
if %ERRORLEVEL% == 0 goto ver_2003

ver | find "XP" > nul
if %ERRORLEVEL% == 0 goto ver_xp

ver | find "2000" > nul
if %ERRORLEVEL% == 0 goto ver_2000

ver | find "NT" > nul
if %ERRORLEVEL% == 0 goto ver_nt

if not exist %SystemRoot%\system32\systeminfo.exe goto warnthenexit

systeminfo | find "OS Name" > %TEMP%\osname.txt
FOR /F "usebackq delims=: tokens=2" %%i IN (%TEMP%\osname.txt) DO set vers=%%i

echo %vers% | find "Windows 7" > nul
if %ERRORLEVEL% == 0 goto ver_7

echo %vers% | find "Windows Server 2008" > nul
if %ERRORLEVEL% == 0 goto ver_2008

echo %vers% | find "Windows Vista" > nul
if %ERRORLEVEL% == 0 goto ver_vista

goto warnthenexit

:ver_7

::Check if 32 or 64 bit
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
REG.exe Query %RegQry% > checkOS.txt
Find /i "x86" < CheckOS.txt > StringCheck.txt

    If %ERRORLEVEL% == 0 (
        :Run Windows 7 32 bit specific commands here.
        Echo "This is 32 Bit Windows 7"
    ) ELSE (
        :Run Windows 7 64 bit specific commands here.
        Echo "This is 64 Bit Windows 7"
    )

goto exit

:ver_2008
:Run Windows Server 2008 specific commands here.
echo Windows Server 2008
goto exit

:ver_vista
:Run Windows Vista specific commands here.
echo Windows Vista
goto exit

:ver_2003
:Run Windows Server 2003 specific commands here.
echo Windows Server 2003
goto exit

:ver_xp
:Run Windows XP specific commands here.
echo Windows XP
goto exit

:ver_2000
:Run Windows 2000 specific commands here.
echo Windows 2000
goto exit

:ver_nt
:Run Windows NT specific commands here.
echo Windows NT
goto exit

:warnthenexit
echo Machine undetermined.

:exit

वाह। यह एक बहुत लंबा और अधिक विस्तृत है जो मैं देख रहा था, लेकिन अच्छा है !
21

1

आप सिर्फ यह देख सकते हैं कि ProgramFiles (x86) खाली है या नहीं। जब तक कोई उपयोगकर्ता या प्रोग्राम इसे मैन्युअल रूप से सेट नहीं करता है।

@ECHO OFF

IF "%ProgramFiles(x86)%"=="" GOTO 64 ELSE goto 86

:64
ECHO %ProgramFiles(x86)%

GOTO Quit

:86
ECHO %ProgramFiles%

GOTO Quit

:Quit
PAUSE

वैकल्पिक रूप से, आप चर PROCESSOR_ARCHITECTURE की जाँच कर सकते हैं - यदि यह 32-बिट सिस्टम है तो इसे "x86" होना चाहिए, यदि यह x86-64 है तो इसे "AMD64" होना चाहिए, यदि यह एक इटेनियम CPU है तो इसे "IA64" होना चाहिए। मैंने इटेनियम एक का परीक्षण नहीं किया है, हालांकि। और मुझे यकीन नहीं है कि x86-64 मशीन पर स्थापित 32-बिट विंडोज सिस्टम के मामले में ये क्या कहेंगे।

ये विंडोज 7 पर जाँच / परीक्षण किए गए थे, और विस्टा पर काम करना चाहिए। Windows XP 64-बिट हमेशा से डोडी रहा है, हालांकि यह वहां काम नहीं कर सकता है।


1
64-बिट मशीन पर 32-बिट विंडोज x86 की रिपोर्ट करता है। मेरे पास 64-बिट सिस्टम था जिसने AMD64 को रिपोर्ट किया था, लेकिन मुझे पूरा यकीन है कि इसमें इंटेल प्रोसेसर था।
इस्जी

3
@Iszi AMD64 है कि कैसे Windows x86-64 प्रोसेसर को संदर्भित करता है - दोनों AMD और Intel वाले। IA64 एक पूरी तरह से अलग वास्तुकला है, और वास्तव में लागू नहीं होता है क्योंकि यह 32-बिट कार्यक्रमों का समर्थन नहीं करता है।
बॉब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.