在Windows批处理文件中的字符串变量中使用%2 *

时间:2012-10-16 18:54:45

标签: windows batch-file variable-assignment

我正在尝试批量创建一个简单的脚本以在Windows中运行,该脚本有3个变量:

  1. 要打开的网址
  2. 要打开的窗口数
  3. 等待新窗口打开的时间
  4. 该脚本工作正常,除非URL包含%20或%2F等字符,我猜cmd.exe正在尝试将它们用作变量,我将URL的值放在引号之间但是没有帮助

    如果我使用地址:

    set url="http://domain.com/app.html?path=%2F%2Flocalhost%2Fcode&do_pause=false&go=true"
    

    浏览器打开它:

    https://domain.com/app.html?path=FFlocalhostFcode&do_pause=false&go=true
    

    有没有办法可以设置变量或处理它的值,以便它不会将这些符号解释为变量名?

    提前致谢,以下是供参考的代码。这是我第一次尝试批量编写脚本,所以任何建议都会非常感激。

    @echo off
    
    echo "Setting variables..."
    set iterations=2
    set url="http://domain.com/app.html?path=%2F%2Flocalhost%2Fcode&do_pause=false&go=true"
    set time=5
    
    set browser="C:\Program Files\Google\Chrome\Application\chrome.exe"
    
    echo "Running the browser..."
    FOR /L %%i IN (1,1,%iterations%) DO (
    %browser% %url%
    timeout %time%
    )
    
    ECHO Browsers are running, press Enter when ready to close this window. . .
    pause
    

2 个答案:

答案 0 :(得分:5)

尝试:

set url="http://domain.com/app.html?path=%%2F%%2Flocalhost%%2Fcode&do_pause=false&go=true"

在批处理文件中,您需要%%代替%,因为%1,%2等用于命令行参数。

答案 1 :(得分:2)

我不太确定 - 很久以前。请试试这个:

set url="http://domain.com/app.html?path=^%2F^%2Flocalhost^%2Fcode&do_pause=false&go=true"

<击>

好的,最后我发现我在哪里得到了插入符号(^)以及应该用插入符号转义的内容:

  

第四,所有保留的shell字符都不是双引号   逃过一劫。这些字符对Windows NT具有特殊意义   命令shell。保留的shell字符为:

     

&安培; | ()&lt; &GT; ^

     

将保留的shell字符作为参数的一部分传递给   命令,整个参数必须用双引号括起来,   或保留字符必须转义。前缀保留字符   用克拉(^)字符来逃脱它。例如,以下内容   命令示例将无法按预期工作,因为&lt;和&gt;是   保留的shell字符:

来源(http://technet.microsoft.com/en-us/library/cc723564.aspx)显然很好地阅读了一篇文档中收集的CMD脚本中一些未明确定义的内容。然而,它没有描述&#39;%&#39;引用。尽管如此,我发现有一个地方提到了%%案例,但没有提到一般情况:

Use of CALL to expand a line a second time.
set var=one
(
  set var=two
  echo %var%
  call echo %%var%%
)

Only the second call echo will output two, as the parser will first parse the 
line when parsing the block to call echo %var%, as doubled percents are reduced
to one.

来源:http://technet.microsoft.com/en-us/library/cc732835(v=ws.10).aspx

然而整个官方 Command Line Reference充满了语言&#39;似乎&#39;:

Reparsing of parenthesis blocks also fails with strange error messages, it seems 
to discover some parser/token internals. 
call (echo one ^| echo two)

所以,我的印象是没有人真正知道甚至试图定义cmd shell的或多或少的结构化语法和行为。