我正在尝试批量创建一个简单的脚本以在Windows中运行,该脚本有3个变量:
该脚本工作正常,除非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
答案 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的或多或少的结构化语法和行为。