无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3933|回复: 10

判断 64/32位 系统&程序 正确导入64/32位DLL 批处理

[复制链接]
发表于 2017-12-11 13:44:47 | 显示全部楼层 |阅读模式
本帖最后由 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 16:38
发表于 2017-12-11 15:30:27 | 显示全部楼层
沙发支持!
回复

使用道具 举报

发表于 2017-12-11 16:53:51 | 显示全部楼层
很好,但%processor_architecture%没啥意义...

点评

比如,制作 32bit 自解压文件,解压后调用 bat 导入 dll  详情 回复 发表于 2017-12-12 14:16
只是有些局限性吧,貌似平时使用大多数时候还是可以的。  详情 回复 发表于 2017-12-11 19:10
回复

使用道具 举报

发表于 2017-12-11 19:10:37 | 显示全部楼层
9zhmke 发表于 2017-12-11 16:53
很好,但%processor_architecture%没啥意义...

只是有些局限性吧,貌似平时使用大多数时候还是可以的。
回复

使用道具 举报

 楼主| 发表于 2017-12-12 14:16:20 | 显示全部楼层
9zhmke 发表于 2017-12-11 16:53
很好,但%processor_architecture%没啥意义...

比如,制作 32bit 自解压文件,解压后调用 bat 导入 dll
回复

使用道具 举报

发表于 2017-12-12 20:08:47 | 显示全部楼层
%PROCESSOR_ARCHITECTURE:~0,3%
回复

使用道具 举报

发表于 2017-12-19 23:04:22 | 显示全部楼层
不是一句话就够了么?
  1. echo %processor_architecture% |find "64" && echo 64Bit || echo Non64Bit
复制代码

点评

%processor_architecture% 是程序的位数,而不是系统位数  详情 回复 发表于 2017-12-22 15:05
回复

使用道具 举报

发表于 2017-12-21 19:15:15 | 显示全部楼层
谢谢分享,学习,学习
回复

使用道具 举报

 楼主| 发表于 2017-12-22 15:05:25 | 显示全部楼层
kingshui 发表于 2017-12-19 23:04
不是一句话就够了么?

%processor_architecture% 是程序的位数,而不是系统位数
回复

使用道具 举报

发表于 2017-12-24 13:45:40 | 显示全部楼层
谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-28 22:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表