无忧启动论坛

标题: 判断 64/32位 系统&程序 正确导入64/32位DLL 批处理 [打印本页]

作者: lintrainwy    时间: 2017-12-11 13:44
标题: 判断 64/32位 系统&程序 正确导入64/32位DLL 批处理
本帖最后由 lintrainwy 于 2020-2-28 00:27 编辑
  1. @ECHO OFF
  2. setlocal ENABLEDELAYEDEXPANSION
  3. mode con cols=80 lines=25
  4. color 0a

  5. :: 批处理获取管理员权限
  6. :-------------------------------------  
  7. %1 mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&&exit /b
  8. pushd "%CD%"& CD /D "%~dp0"
  9. :--------------------------------------
  10. cd /d "%~dp0"


  11. echo 导入运行库DLL
  12. pushd "%~dp0"
  13. if defined programw6432 (
  14.         if %PROCESSOR_ARCHITECTURE%==AMD64 (
  15.                 echo 64bit/64bit OS
  16.                 copy /y ".\dll\32bit\*" "%Windir%\SysWOW64">nul 2>&1
  17.                 copy /y ".\dll\64bit\*" "%Windir%\System32">nul 2>&1
  18.         ) else (
  19.                 echo 32bit/64bit OS
  20.                 copy /y ".\dll\32bit\*" "%Windir%\System32">nul 2>&1
  21.                 copy /y ".\dll\64bit\*" "%Windir%\Sysnative">nul 2>&1
  22.         )
  23. ) else (
  24.                 echo 32bit/32os
  25.                 copy /y ".\dll\32bit\*" "%Windir%\System32">nul 2>&1>nul 2>&1
  26. )
  27. popd

  28. pause
  29. goto :EOF
复制代码



说明 %windir%\System32 %windir%\SysWOW64 %windir%\Sysnative
%windir%\Sysnative 为重定向访问路径

                32bit OS             64bit OS
32bit exe   System32         System32/SysWOW64/Sysnative
64bit exe      -             System32/SysWOW64


32bit OS    not defined ProgramW6432
64bit OS        defined ProgramW6432
32bit exe   %PROCESSOR_ARCHITECTURE%==x86
64bit exe   %PROCESSOR_ARCHITECTURE%==AMD64
____________________________________
rem 判断64/32位系统,四种方法
::set "OSbit=32" &wmic os get OSArchitecture|find "64">nul 2>&1 && set "OSbit=64"

::set "OSbit=32" ® query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE|find "64">nul 2>&1 &&set "OSbit=64"

::if EXIST %windir%\SysWOW64 (set "OSbit=64")else (set "OSbit=32")

set "OSbit=32" &if defined programw6432 set "OSbit=64"

rem 判断64/32位程序
set "exebit=32" &echo %processor_architecture% |find "64">nul 2>&1 && set "exebit=64"

echo %exebit% 位程序运行在 %OSbit% 位操作系统上
pause


作者: 青青草    时间: 2017-12-11 15:30
沙发支持!
作者: 9zhmke    时间: 2017-12-11 16:53
很好,但%processor_architecture%没啥意义...
作者: Anson4    时间: 2017-12-11 19:10
9zhmke 发表于 2017-12-11 16:53
很好,但%processor_architecture%没啥意义...

只是有些局限性吧,貌似平时使用大多数时候还是可以的。
作者: lintrainwy    时间: 2017-12-12 14:16
9zhmke 发表于 2017-12-11 16:53
很好,但%processor_architecture%没啥意义...

比如,制作 32bit 自解压文件,解压后调用 bat 导入 dll
作者: chishingchan    时间: 2017-12-12 20:08
%PROCESSOR_ARCHITECTURE:~0,3%
作者: kingshui    时间: 2017-12-19 23:04
不是一句话就够了么?
  1. echo %processor_architecture% |find "64" && echo 64Bit || echo Non64Bit
复制代码

作者: wuyufeng    时间: 2017-12-21 19:15
谢谢分享,学习,学习
作者: lintrainwy    时间: 2017-12-22 15:05
kingshui 发表于 2017-12-19 23:04
不是一句话就够了么?

%processor_architecture% 是程序的位数,而不是系统位数
作者: ai20110304    时间: 2017-12-24 13:45
谢谢了




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3