Batch file to check os architecture and then execu

2019-08-03 10:58发布

问题:

I am trying to write a batch file which will ease the process of installing drivers for our users.

The batch file needs to check what version of os (64bit or 32bit) the code is running on and then execute the appropriate .exe.

This is what I have so far:

set os_version=wmic os get osarchitecture
echo "%os_version%"
pause

IF os_version = "64-bit"
@run 64 bit
start /d "%0" CP210xVCPInstaller_x64.exe
ELSE
@run 32 bit
start /d  "%0" CP210xVCPInstaller_x86.exe

Now I am having an issue with assigning the output of the command wmic os get osarchitecture to a variable.

Then I need to check if it is equal to 64-bit and if so execute a .exe in the same location as the bat file?

Second Question is how do I run a .exe from the same directory as the bat file?

回答1:

This is simpler:

if exist "%SYSTEMDRIVE%\Program Files (x86)\" (
   start "" /d "%~dp0" "CP210xVCPInstaller_x64.exe"
) else (
   start "" /d "%~dp0" "CP210xVCPInstaller_x86.exe"
)


回答2:

for /f %%a in ('wmic os get osarchitecture^|find /i "bits"') do set "bits=%%a"
echo %bits%

This will handle the "How" to assign the output to the variable. To avoid problems, only the first token in the output of wmic is retrieved (from 32 bits or 64 bits, only the numbers)



回答3:

MC ND's method needs to be changed to the following...

for /f %%a in ('wmic os get osarchitecture ^| find /i "bit"') do set "bits=%%a"
echo %bits%

Notice the difference in the find /i "bit" vs find /i "bits". Using "bits" will not work as the OSArchitecture only returns 32-bit or 64-bit, not bits.



回答4:

if exist %windir%/syswow64 (
   start "" /d "%~dp0"/64 bit program (PE d+) path
) else (
   start "" /d "%~dp0"/32 bit program (PE L) path
)