vszy 发表于 2026-1-15 20:31:22

能调用批处理,但执行的内容不对,什么鬼?

批处理内容如下:


@echo off
setlocal enabledelayedexpansion
set compress=rar,zip,7z,arj,bz2,cab,gz,jar,lz,lzh,tar,uue,xz,z,zipx,zst,001
cd /d "%~dp0"
set "reg_key=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver"
set "reg_value=DisplayIcon"
for /f "tokens=2*" %%a in ('reg query "%reg_key%" /v "%reg_value%" 2^>nul') do (
    set "raw_path=%%b"
)

for /f "delims=," %%a in ("!raw_path!") do (
    set "exe=%%a"
)

if not defined exe (
    pause
    exit /b 1
)
set "pid=WinRAR"
for %%i in (%compress%) do (
    SFTA.exe --reg "!exe!" ".%%i" "!pid!"
)

命名为tempcmd.bat。
然后不管是用ShellExecute(@ScriptDir & "\tempcmd.bat", "", "", $SHEX_OPEN, @SW_SHOW)还是RunWait("cmd /c " & @ScriptDir&"\"&"tempcmd.bat","",@SW_MAXIMIZE)调用执行,都出来个DOS框提示按任意键继续。
双击tempcmd.bat可以正确执行。是不是AU3调用批处理后批处理找不到设置的变量了(SFTA.exe文件和注册表键值确定存在)
吐槽一下Win11的文件关联机制,安装完RAR后常见的压缩格式不能自动关联,还得挨个格式双击再选RAR始终打开才行。所以才找到SFTA.exe和bat脚本来解决。结果调用bat又出问题了...

fybhwsx 发表于 7 天前

和我遇到的问题一样啊,我用创建任务计划去执行这个批处理管用,哈哈。。
https://www.autoitx.com/forum.php?mod=viewthread&tid=74588#lastpost

gyp2000 发表于 前天 22:20

你要格式关联的程序是 WinRAR是64位版本,批处理默认也是调用64位 cmd.exe.
你需要将代码编译成64位程序,才可以直接调用这个批处理。

如果使用默认设置编译成32位程序,那么只会调用32位的 cmd.exe,
这时候,批处理会找不到 WINRAR的安装目录。
找不到winrar 自然不会去执行文件格式关联。
页: [1]
查看完整版本: 能调用批处理,但执行的内容不对,什么鬼?