A C*_*God 4 batch command-line writing vbscript echo
我正在编写一个批处理脚本,它通过回显每一行并将输出定向到创建的文件来创建 VB 脚本。除了获取命令行变量并将其用作 VBS 变量的两行之外,它在大多数情况下都有效。这是代码:
ECHO:strHomeFolder = oShell.ExpandEnvironmentStrings^(^"^%USERPROFILE^%^"^) >> uninstallBeta.vbs
ECHO:strProgramData = oShell.ExpandEnvironmentStrings^(^"^%ProgramData^%^"^) >> uninstallBeta.vbs
Run Code Online (Sandbox Code Playgroud)
它在 VB 脚本中应该是这样的:
strHomeFolder = oShell.ExpandEnvironmentStrings("%USERPROFILE%")
strProgramData = oShell.ExpandEnvironmentStrings("%ProgramData%")
Run Code Online (Sandbox Code Playgroud)
但会发生什么是批处理脚本,它只是回应整行,包括>> uninstallBeta.vbs. 知道为什么会这样吗?我有类似的行来创建其他 VBS 和批处理脚本,我认为这样做很好。我检查了拼写错误,没有发现。它在命令提示符中运行良好,但在批处理脚本中不起作用。
有助于理解 cmd.exe 如何解析批处理脚本:
第 1 部分 - 概述
第 2 部分 - 百分比扩展详细信息
我将完成第一条故障线路的处理:
echo strHomeFolder = oShell.ExpandEnvironmentStrings^(^"^%USERPROFILE^%^"^) >> uninstallBeta.vbs
Run Code Online (Sandbox Code Playgroud)
阶段 1 中的百分比处理发生^在阶段 2 中的转义处理之前。因此解析器查找名为 的环境变量USERPROFILE^,但未能找到它。所以它扩展为一个空字符串,留下:
echo strHomeFolder = oShell.ExpandEnvironmentStrings^(^"^^"^) >> uninstallBeta.vbs
Run Code Online (Sandbox Code Playgroud)
接下来,在第二阶段处理插入符号以转义字符。重要的是第一个^"是转义引号,所以后面的字符没有被引用。下一个^^是转义的插入符。Than 跟随未转义的第一个引号,因此后面的所有字符都被引用。我用 Q 在每个引用字符上方表示:
QQQQQQQQQQQQQQQQQQQQQQQ
echo strHomeFolder = oShell.ExpandEnvironmentStrings("^"^) >> uninstallBeta.vbs
Run Code Online (Sandbox Code Playgroud)
>>重定向不起作用的原因应该很明显- 它被引用,因此它作为字符串文字起作用。
您试图转义%as^%以防止批处理中的变量扩展。那行不通。正确的做法是将百分比加倍:
echo strHomeFolder = oShell.ExpandEnvironmentStrings("%%USERPROFILE%%") >> uninstallBeta.vbs
Run Code Online (Sandbox Code Playgroud)
如果该行在带括号的块内,则您需要转义),但(永远不需要转义
for .... do (
...
echo strHomeFolder = oShell.ExpandEnvironmentStrings("%%USERPROFILE%%"^) >> uninstallBeta.vbs
...
)
Run Code Online (Sandbox Code Playgroud)
请注意,规则与命令行不同。%在命令行中没有真正转义 a 的机制,%undefinedVar%如果变量未定义,命令行会保留文本。但是,您可以通过^在百分比之间包含一个或多个以便找不到变量来有效地防止变量扩展。然后插入符号在第 2 阶段消失。但需要转义第一个引号,以便内部^消失。并且必须对最后一个引号进行转义,以便重定向处于活动状态。
这适用于命令行(但不在批处理脚本中):
echo strHomeFolder = oShell.ExpandEnvironmentStrings(^"%USERPROFILE^%^") >> uninstallBeta.vbs
Run Code Online (Sandbox Code Playgroud)
插入符号可以出现在百分比之间的任何位置。以下所有内容也同样有效:
%USER^PROFILE%
%^USERPROFILE%
etc.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1547 次 |
| 最近记录: |