批处理文件协议解析器

时间:2012-07-30 08:31:42

标签: windows windows-7 batch-file

我的自定义协议(phpfile)让我通过浏览器在编辑器中打开php文件。唯一的问题是,它提供了完整的网址,每个浏览器都有所不同,我见过:

  • phpfile:/ [文件]
  • phpfile:/ [文件] /
  • phpfile:// [文件] /
  • phpfile:// [文件]

所有这些都需要转换为[file]。问题是我得到了语法错误。什么是正确的语法?

set var=%1
if("%var:~0,9%"=="phpfile:/")
{
    set url = %var:~9% 
}
else
{
    set url = %var:~10%
}

if(%var:-1,1% == "/")
{
    url = %url:~0,-1%   
}
START "" "C:\Program Files (x86)\NuSphere\PhpED\7.0\phped.exe" url

===编辑=== 我现在有以下内容,但它在URL的末尾加上“”

SETLOCAL enabledelayedexpansion

set var=%1

if %var:~0,9%=="phpfile:/" (
    set url = %var:~9% 
) else (
    set url = %var:~10%
)

if "%var:~-1%"=="\" (
    set url = %url:~0,-1%"
)
if "%var:~-1%"=="/" (
    set url = %url:~0,-1%"
)

START "" "C:\Program Files (x86)\NuSphere\PhpED\7.0\phped.exe" %url:"=%

2 个答案:

答案 0 :(得分:2)

那是因为你在批处理文件和C之间写了一些可怕的混蛋,但肯定没有在任何地方使用过的语言。

尝试以下方法:

setlocal enabledelayedexpansion
set "var=%~1"
if "!var:~0,9!=="phpfile:/" (
    set "url=!var:~9!"
) else (
    set "url=!var:~10!"
)

if "!var:-1,1!"=="/" (
    set "url=!url:~0,-1!"
)

START "" "C:\Program Files (x86)\NuSphere\PhpED\7.0\phped.exe" "!url!"

延迟扩展主要用于更好地处理导致批处理文件出现问题的某些字符。但一般来说,我想知道你希望你的代码如何工作。

答案 1 :(得分:1)

你的代码中存在很多问题,这应该解决问题:

set var="%1"
if %var:~0,9%=="phpfile:/" (
    set url="%var:~9%"
) else (
   set url="%var:~10%"
)

if "%var:-1,1%"=="/" (
    set url="%url:~0,-1%"
)
START "" "C:\Program Files (x86)\NuSphere\PhpED\7.0\phped.exe" url

您可以使用help <command>检查批处理文件命令的语法。 IF语句不使用花括号,或者需要在条件语句周围使用圆括号。