亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在for循環中初始化的批處理文件變量

在for循環中初始化的批處理文件變量

汪汪一只貓 2019-12-27 23:18:11
我有一個批處理文件,該文件通過for循環內的SET初始化變量,用于磁盤上的一組文件:for %%f in (%MYTARGETDIR%\*config.xml) do (  SET TMPFILE=%%F.tmp  echo In loop %TMPFILE%)echo End loop %TMPFILE%當我在全新的命令外殼程序(未定義TMPFILE)中運行此命令時,In循環回顯為空,但end循環回顯則不為空。當我第二次運行時,它已經設置好了,并輸出它的值,而忽略了設置,直到循環關閉。為什么會這樣,以及解決方法是什么?
查看完整描述

3 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

這是因為()塊僅解析一次,因此在運行循環之前它將替換%TMPFILE%。


查看完整回答
反對 回復 2019-12-28
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

記錄下來,更正后的腳本如下所示:


setlocal ENABLEDELAYEDEXPANSION


for %%f in (%MYTARGETDIR%\*config.xml) do (


  SET TMPFILE=%%F.tmp


  echo In loop !TMPFILE!

)


echo End loop %TMPFILE%

謝謝克里斯的幫助。



查看完整回答
反對 回復 2019-12-28
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

這是因為讀取命令時會替換環境變量。對于以下命令:


for %%f in (%mytargetdir%\*config.xml) do (

    set tmpfile=%%f.tmp

    echo In loop %tmpfile%

)

for在執行之前,將讀取并替換整個命令(從到右括號)。


您需要使用延遲擴展,例如:


@echo off

    setlocal enableextensions enabledelayedexpansion

    set full=/u01/users/pax

:loop1

    if not "!full:~-1!" == "/" (

        set full2=!full:~-1!!full2!

        set full=!full:~,-1!

        goto :loop1

    )

    echo !full!

    endlocal

啟用延遲擴展后,"%"標記仍然像以前一樣工作,但是您可以使用"!"標記來執行延遲擴展。



查看完整回答
反對 回復 2019-12-28
  • 3 回答
  • 0 關注
  • 569 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號