2016-09-20 10 views
1

別のバットファイルからセット変数を使用してバットファイルを作成したいとします。 これはネットワークドライブをマップし、いくつかのファイルをローカルコンピュータにコピーし、実行する必要があるシステムサービスを調べるスタートアップ.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コマンドをかっこで囲みます.1回のリダイレクト操作のみが必要です。読みやすさとパフォーマンスが向上します。

さらに、代入式全体が1組の引用符の間に置かれ、特殊文字に対して堅牢になるように(引用符は値の一部にならないように)、構文を改善しました。

+0

こんにちは、okありがとう、それはトリックをしたようです – ReaperMaxer

関連する問題