2016-09-20 120 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

相關問題