2016-09-20 109 views
1

我想用另一个bat文件中的set变量创建一个bat文件。 这是为启动.bat文件映射网络驱动器并将某些文件复制到本地计算机并查看需要运行的系统服务。用另一个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" 

回答

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语法,以便将整个赋值表达式放置在一对引号之间,这使得它对特殊字符(引号不成为值的一部分)具有强大的稳健性。

+0

你好,很酷很感谢你好像这样做的伎俩 – ReaperMaxer

相关问题