ilovejay88 发表于 2023-8-23 09:49

制作的BAT有点问题。

下面这段批处理

@echo off
set var=10.111.96.28

:PingLoop
ping %var% -n 1 | find "TTL=" > nul
if errorlevel 1 (
    timeout /t 1 > nul
    goto PingLoop
)

start "URL Title" "http://10.111.96.28/cgi-bin/consoleONEng.cgi?D=%05%02%00%00%00%00%00"

当IP通是,打开的网页是错误的。浏览器里显示
http://10.111.96.28/cgi-bin/consoleONEng.cgi?D=C:\Users\Frank\Desktop\text.bat5C:\Users\Frank\Desktop\text.bat2C:\Users\Frank\Desktop\text.bat0C:\Users\Frank\Desktop\text.bat0C:\Users\Frank\Desktop\text.bat0C:\Users\Frank\Desktop\text.bat0C:\Users\Frank\Desktop\text.bat0

并未正确的指向这个URL,是为什么?

1107934496 发表于 2023-8-23 09:51

问题在于批处理中URL的格式化以及特殊字符的处理。在你的代码中,URL 中的一些字符被解释为批处理命令的一部分,导致 URL 格式错误。解决这个问题的方法是对 URL 进行适当的转义。在 Windows 的批处理中,&, <, >, |, ^, 和 " 等字符是特殊字符,需要进行转义处理。

1107934496 发表于 2023-8-23 09:53

以下是经过修改的批处理代码,用于正确处理 URL:

@echo off
set var=10.111.96.28

:PingLoop
ping %var% -n 1 | find "TTL=" > nul
if errorlevel 1 (
    timeout /t 1 > nul
    goto PingLoop
)

REM 注意这里对URL中的特殊字符进行了转义处理
start "URL Title" "http://10.111.96.28/cgi-bin/consoleONEng.cgi?D=%%43%%3a%%5c%%55%%73%%65%%72%%73%%5c%%46%%72%%61%%6e%%6b%%5c%%44%%65%%73%%6b%%74%%6f%%70%%5c%%74%%65%%78%%74%%2e%%62%%61%%74%%35%%43%%3a%%5c%%55%%73%%65%%72%%73%%5c%%46%%72%%61%%6e%%6b%%5c%%44%%65%%73%%6b%%74%%6f%%70%%5c%%74%%65%%78%%74%%2e%%62%%61%%74%%32%%43%%3a%%5c%%55%%73%%65%%72%%73%%5c%%46%%72%%61%%6e%%6b%%5c%%44%%65%%73%%6b%%74%%6f%%70%%5c%%74%%65%%78%%74%%2e%%62%%61%%74%%30%%43%%3a%%5c%%55%%73%%65%%72%%73%%5c%%46%%72%%61%%6e%%6b%%5c%%44%%65%%73%%6b%%74%%6f%%70%%5c%%74%%65%%78%%74%%2e%%62%%61%%74%%30%%43%%3a%%5c%%55%%73%%65%%72%%73%%5c%%46%%72%%61%%6e%%6b%%5c%%44%%65%%73%%6b%%74%%6f%%70%%5c%%74%%65%%78%%74%%2e%%62%%61%%74%%30%%43%%3a%%5c%%55%%73%%65%%72%%73%%5c%%46%%72%%61%%6e%%6b%%5c%%44%%65%%73%%6b%%74%%6f%%70%%5c%%74%%65%%78%%74%%2e%%62%%61%%74%%30%%43%%3a%%5c%%55%%73%%65%%72%%73%%5c%%46%%72%%61%%6e%%6b%%5c%%44%%65%%73%%6b%%74%%6f%%70%%5c%%74%%65%%78%%74%%2e%%62%%61%%74%%30"


在这个修改后的代码中,URL 中的特殊字符都进行了转义处理,以确保 URL 被正确解析和打开。请注意,这可能会导致 URL 看起来非常冗长,但这是为了确保在批处理环境中正确处理特殊字符。

ilovejay88 发表于 2023-8-23 10:03

1107934496 发表于 2023-8-23 09:53
以下是经过修改的批处理代码,用于正确处理 URL:

@echo off


@echo off
set var=10.111.96.28

:PingLoop
ping %var% -n 1 | find "TTL=" > nul
if errorlevel 1 (
    timeout /t 1 > nul
    goto PingLoop
)

start "URL Title" "http://10.111.96.28/cgi-bin/consoleONEng.cgi?D=%%05%%02%%00%%00%%00%%00%%00"

经过转义后打开的网页,没有http://头,
直接是10.111.96.28/cgi-bin/consoleONEng.cgi?D=%05%02%00%00%00%00%00
这导致此网页功能没有激活。

1107934496 发表于 2023-8-23 10:07

本帖最后由 1107934496 于 2023-8-23 10:11 编辑

试试这个

@echo off
set var=10.111.96.28

:PingLoop
ping %var% -n 1 | find "TTL=" > nul
if errorlevel 1 (
    timeout /t 1 > nul
    goto PingLoop
)

REM 注意:这里的 URL 使用了 call 命令以确保整个 URL 被当作一个参数传递
call :OpenURL "http://10.111.96.28/cgi-bin/consoleONEng.cgi?D=%%05%%02%%00%%00%%00%%00%%00"
exit /b

:OpenURL
start "URL Title" %1
exit /b


补充:版规规定了禁止使用ChatGPT或其他AI生成的答案解答问题,这个使用call打开URL的方式也不行的话,你再试试把之前那个转义过的url替换进来

wshuangh888 发表于 2023-8-23 10:51

不懂不懂{:1_908:}

myhkhk 发表于 2023-8-23 11:53

把最后一句改成
start http://10.111.96.28/cgi-bin/consoleONEng.cgi?D=%05%02%00%00%00%00%00
试试

罗萨 发表于 2023-8-23 14:09

start "URL Title" ""http://10.111.96.28/cgi-bin/consoleONEng.cgi?D=%05%02%00%00%00%00%00""

xiaopao 发表于 2023-8-23 14:41

批处理特殊字符转义简直头大
页: [1]
查看完整版本: 制作的BAT有点问题。