gbzxssx 发表于 2019-9-11 19:27:48

ATI 32位 64位自动选择问题

本帖最后由 gbzxssx 于 2019-9-11 19:29 编辑

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
if %PROCESSOR_ARCHITECTURE%==x86 goto x86
if %PROCESSOR_ARCHITECTURE%==AMD64 goto AMD64
goto error

:error
echo "不支持此操作系统平台"
goto end

:x86
cmd.exe /c ATIx86.exe
goto end

:AMD64
cmd.exe /c ATIx64.exe
goto end

:end
exit
运行后,会出现mshta 不是内部命令或外部命令,如图,但会继续运行,且结果正确,是啥原因?应该如何修改?

zlq_hysy 发表于 2019-9-11 20:23:42

下个mshta放在当前目录

gbzxssx 发表于 2019-9-11 20:39:41

zlq_hysy 发表于 2019-9-11 20:23
下个mshta放在当前目录

mshta.exe放在system32文件夹中只闪一下,没有运行ATI。如果这个批命令在WIN10 32位或64位环境下,运行没问题,但在WIN10 PE环境下就有这问题,

zlq_hysy 发表于 2019-9-11 20:57:34

gbzxssx 发表于 2019-9-11 20:39
mshta.exe放在system32文件夹中只闪一下,没有运行ATI。如果这个批命令在WIN10 32位或64位环境下,运行 ...

PE下缺这少那的,不能运行可以理解

gbzxssx 发表于 2019-9-11 21:23:00

本帖最后由 gbzxssx 于 2019-9-11 21:24 编辑

zlq_hysy 发表于 2019-9-11 20:57
PE下缺这少那的,不能运行可以理解

我已说了,有mshta.exe,也不能正确运行,应该是缺一组文件,但奇怪的是,有mshta.exe,不能运行,只闪一下,没mshta.exe,只显示mshta不是内部或外部命令,但有正确结果。我查了一下64位的WIN10在syswow64文件夹中有个mshta.exe,大小13K,system32文件夹中有个mshta.exe,大小15K。在32位WIN10的system32中有个mshta.exe,大小13K。

注意:在WIN10 32位或64位环境下,运行没问题,但在WIN10 PE环境下就有这问题,

红毛樱木 发表于 2019-9-12 00:17:05

变通一下呗。
补上mshta.exe之后,cmd里的手动运行mshta.exe,看看报错什么。

chishingchan 发表于 2019-9-12 08:33:25

精减代码
@if not "%1"=="h" mshta vbscript:createobject("wscript.shell").run("%~sf0 h %*",0)(window.close)&exit /b

if %PROCESSOR_ARCHITECTURE%==x86 goto x86
if %PROCESSOR_ARCHITECTURE%==AMD64 goto AMD64
exit

:x86
cmd.exe /c ATIx86.exe
exit

:AMD64
cmd.exe /c ATIx64.exe
exit

gbzxssx 发表于 2019-9-12 09:21:06

红毛樱木 发表于 2019-9-12 00:17
变通一下呗。
补上mshta.exe之后,cmd里的手动运行mshta.exe,看看报错什么。

对,我试一下

bhdc 发表于 2019-9-12 09:22:41

为什么不用pecmd来判断?

gbzxssx 发表于 2019-9-12 09:35:33

bhdc 发表于 2019-9-12 09:22
为什么不用pecmd来判断?

我是放在FBA文件外面,修改更方便,如果没办法就只能用PECMD判断了

gbzxssx 发表于 2019-9-12 09:39:08

本帖最后由 gbzxssx 于 2019-9-12 09:41 编辑

红毛樱木 发表于 2019-9-12 00:17
变通一下呗。
补上mshta.exe之后,cmd里的手动运行mshta.exe,看看报错什么。

补上mshta.exe之后,手动运行mshta.exe,窗口闪一下,没报错,看来是执行mshta.exe之后,不往下运行才会这样。导致没mshta.exe文件虽报错,但继续运行。

gbzxssx 发表于 2019-9-12 09:47:43

chishingchan 发表于 2019-9-12 08:33
精减代码

按这个代码,肯定也会,因为他出错在mshta

yigeren 发表于 2019-9-12 10:40:28

简单版:
@echo off
PUSHD %~dp0
if exist %windir%\SysWOW64 (
Start ATIx64.exe
)else (
Start ATIx86.exe
)

ku588 发表于 2019-9-12 10:45:27

本帖最后由 ku588 于 2019-9-12 11:09 编辑

应该是PE下mshta组件不全,PE下执行,批处理代码没必要加管理员身份运行代码,
把这段代码:
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
去掉就行,或者@echo off下面加上cd /d %~dp0,右键以管理员身份运行即可!

gbzxssx 发表于 2019-9-12 11:50:08

ku588 发表于 2019-9-12 10:45
应该是PE下mshta组件不全,PE下执行,批处理代码没必要加管理员身份运行代码,
把这段代码:
mshta vbscr ...

你谁去掉的代码是要让窗口隐藏执行的,去掉看得到窗口了

ku588 发表于 2019-9-12 11:59:48

gbzxssx 发表于 2019-9-12 11:50
你谁去掉的代码是要让窗口隐藏执行的,去掉看得到窗口了

改成这样就行了:
cmd.exe /c start ATIx86.exe
cmd.exe /c start ATIx64.exe

gbzxssx 发表于 2019-9-12 12:03:01

yigeren 发表于 2019-9-12 10:40
简单版:
@echo off
PUSHD %~dp0


试过你的代码,窗口闪二下ATI就启动了,并且没留CMD窗口,效果还不错,谢了

gbzxssx 发表于 2019-9-12 12:04:57

本帖最后由 gbzxssx 于 2019-9-12 12:06 编辑

ku588 发表于 2019-9-12 11:59
改成这样就行了:
cmd.exe /c start ATIx86.exe
cmd.exe /c start ATIx64.exe

谢谢指导,用yigeren的代码跟简单

chishingchan 发表于 2019-9-12 12:21:41

精简批处理
@if not "%1"=="h" mshta vbscript:createobject("wscript.shell").run("%~sf0 h %*",0)(window.close)&exit /b
if %PROCESSOR_ARCHITECTURE%==x86 "%~dp0ATIx86.exe"
if %PROCESSOR_ARCHITECTURE%==AMD64 "%~dp0ATIx64.exe"
页: [1]
查看完整版本: ATI 32位 64位自动选择问题