问号获取在Windows批处理文件

时间:2017-02-07 06:19:51

标签: windows batch-file url escaping

我在几天前工作的批处理脚本遇到了问题,但现在无法正常工作,即使没有进行任何更改! 我相信在我不知情的情况下系统会发生一些变化。

预期的链接是:

order.htm?order=12345

但它变成这样:(注意问号变为%3F)

order.htm%3Forder=12345

代码如下:

@echo off
echo.

set "drive=%~d0"
set "runningDir=%~dp0"

:start
ClS
Echo.
Set /P Job=Enter number:^>

@echo off

if exist c:\"Program Files (x86)"\Google\Chrome\Application\chrome.exe goto program_files_x86

:program_files_x86
start c:\"Program Files (x86)"\Google\Chrome\Application\chrome.exe --disable-print-preview --ignore-certificate-errors --disable-web-security --user-data-dir --allow-file-access-from-files %runningDir%\order.htm?order=%job%
goto end

:end
goto start

有什么建议吗?

最诚挚的问候 尼克拉斯

1 个答案:

答案 0 :(得分:2)

双引号通常应该用在整个文件夹/文件字符串周围,而不仅仅是它的一部分。

命令 START 将第一个双引号字符串解释为新命令进程的标题。因此,在启动GUI应用程序时,应在 START 命令行上使用由""指定的空标题字符串,以避免将双引号文件名解释为要作为标题字符串执行的应用程序的路径。

%~dp0引用的批处理文件路径始终以反斜杠结尾。因此,不要在此字符串之后指定额外的退格键,或者在runningDir之类的环境变量中指定批处理文件的路径。顺便说一句:运行批处理文件的当前目录可以与批处理文件的目录不同。因此,名称runningDir并不具有误导性。环境变量的更好名称是BatchPath

可以在批处理文件中使用start作为标签。但由于命令 START 导致难以分别搜索标签搜索命令,因此不建议这样做。最好使用Begin等标签。

在url中,目录分隔符为/,因此批处理文件路径中的每个反斜杠(Windows上的目录分隔符)都应替换为斜杠。

网址应以http://(超文本传输​​协议)等协议开头,并且应完全用双引号括起来。

最后echo/echo(优于echo.打印空白行,有关详细信息,请参阅Difference between Echo[Special Character]

重写的批处理代码:

@echo off
echo/

set "BatchPath=%~dp0"
set "BatchPath=%BatchPath:\=/%"

:Begin
clS
echo/
set /P "Job=Enter number: "

if exist "%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" goto program_files_x86

:program_files_x86
start "" "%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe" --disable-print-preview --ignore-certificate-errors --disable-web-security --user-data-dir --allow-file-access-from-files "http://%BatchPath%order.htm?order=%Job%"
goto end

:end
goto Begin

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • cls /?
  • echo /?
  • goto /?
  • if /?
  • set /?
  • start /?