使用另一个bat文件中的变量创建bat文件

时间:2016-09-20 13:41:37

标签: batch-file escaping

我想用另一个bat文件中的set变量创建一个bat文件。 这适用于启动.bat文件,该文件映射网络驱动器并将某些文件复制到本地计算机并查看需要运行的系统服务。

每次登录.bat文件运行时,还需要创建一个日志文件。以下是我所做的一些示例。

ECHO set SERVER IP=>>"V:\GENESIS\GENESIS INSTALL FILES\GenesisLogonUser.bat"
ECHO set DRIVE1=V>>"V:\GENESIS\GENESIS INSTALL FILES\GenesisLogonUser.bat"
ECHO set MAPDRIVE1=\\%SERVER IP%\v /P:Yes>>"V:\GENESIS\GENESIS INSTALL FILES\GenesisLogonUser.bat"
ECHO net use %DRIVE1%: %MAPDRIVE1% >>"%userprofile%\Documents\scripts\logonlog.txt">>"V:\GENESIS\GENESIS INSTALL FILES\GenesisLogonUser.bat"

1 个答案:

答案 0 :(得分:2)

您需要转换变量的百分比扩展。这可以通过将批处理脚本中的每个%符号加倍来完成:

set "VAR=Value"
echo %%VAR%%

这将回应:

%VAR%

请注意,这不能直接在控制台窗口中使用;你需要这样做:

>set "VAR=Value"

>echo ^%VAR^%
%VAR%

所以要将它应用到你的脚本,它看起来像这样(我从转义中排除了%USERPROFILE%因为我不知道你喜欢它;当然你也可以写%%USERPROFILE%%

(
    ECHO set "SERVER IP="
    ECHO set "DRIVE1=V"
    ECHO set "MAPDRIVE1=\\%%SERVER IP%%\v /P:Yes"
    ECHO net use %%DRIVE1%%: %%MAPDRIVE1%%^>^>"%USERPROFILE%\Documents\scripts\logonlog.txt"
) > "V:\GENESIS\GENESIS INSTALL FILES\GenesisLogonUser.bat"

由于回显文本中有一些重定向,因此需要像^>^>一样进行转义。

我还将所有ECHO命令放在括号内,这只需要一次重定向操作;这提高了易读性和性能。

此外,我改进了set语法,以便将整个赋值表达式放在一对引号之间,这使得它对特殊字符具有鲁棒性(引号不会成为值的一部分)。