it-swarm-ja.com

バッチループ内で文字列を連結できません

私はしばらくこれに苦労してきました、そして私は理由を理解することができないようです。

私はこのバッチファイルを持っています:

@echo on    
setlocal enabledelayedexpansion

for /F %%x in (FileList.txt) do (
    for /L %%i in (1,1,16) do (
        if %%i LSS 10 (set ctr=0%%i) else (set ctr=%%i)
        echo !ctr!
        set target = \\Server-!ctr! password /user:domain\username
        echo %target%
        echo Net Use z: %target%
        echo copy %%x "z:%%~pnx" /Y
        echo Net Use z: /delete
    )
)

私のctr変数は適切に設定されていますが、それを連結しようとすると、\ Server-!ctr!だけが表示されます。パスワード/ user:domain\username。 %!ctr!%、%ctr%、%% ctr、%% ctr %%を試しましたが、すべて、値ではなくリテラル文字を返すようにしています。興味深いことに、setコマンドを実行すると、echo!ctr!値を返します。また、設定されたパラメーターを引用符で囲んでみましたが、同じ結果で、引用符で囲んでいます。

何が足りないのですか?

3
user4450016

私は何が欠けていますか

setコマンドを正しく使用していません。

set target = \\Server-!ctr! password /user:domain\username

これにより、「target」という変数が作成されます(名前の後の余分なスペースに注意してください)。

さらに、式の右側にはスペースが含まれているため、引用符も必要です。

変数名または文字列の前後の余分なスペースは無視されません。SETは他の多くのスクリプト言語のように余分なスペースを許容しません。

ソース セット

次の交換を試してください。

set target="\\Server-!ctr! password /user:domain\username"

また、遅延拡張を正しく使用(理解)していません。

echo %target%
echo Net Use z: %target%

遅延拡張により、変数は解析時ではなく実行時に拡張されます。

ソース enabledelayedexpansion

これは次のようになります。

echo !target!
echo Net Use z: !target!

参考文献

0
DavidPostill