請選擇 進入手機版 | 繼續訪問電腦版

微剋多資訊

 找回密碼
 註冊

Login

搜索
回覆 13則 瀏覽 1574篇

[問題已解決] CMD問題:IF判斷區內的for迴圈問題

該用戶從未簽到

發表於 2016-9-2 18:27 | 顯示全部樓層 |閱讀模式
本帖最後由 jmsdhn 於 2016-9-2 18:31 編輯

(FOR寫在IF裡面)(無效)
------------------------------
IF 判斷 (
   for 規則 set string=%%i
   echo "%string%"
)
------------------------------
上面這樣會得到
echo ""  ===>顯示為  ""


但是這樣寫的話(FOR寫在IF外面)(這是目前解法)
------------------------------
for 規則 set string=%%i
IF 判斷 (
   echo "%string%"
)
------------------------------
上面這樣會得到
echo "想要的" ===>顯示為  "想要的"


請問
IF判斷中是否不能用for迴圈來設定變數(string)給判斷式內的其他指令(echo等等)用?

該用戶從未簽到

發表於 2016-9-2 18:33 | 顯示全部樓層
通常都是搭配 goto,CMD比較古老,無法判斷太複雜的迴圈(也許是我也不會用)

使用道具

該用戶從未簽到

 樓主| 發表於 2016-9-2 18:40 | 顯示全部樓層
感謝釐清
畢竟如果沒人證實一下
可能會一直想下去

現在更是發現
set指令似乎有某些規則

譬如
--------------------
IF 判斷1 (
set AAA=XYZ
指令 %AAA%
)
--------------------
會出問題

但是
--------------------
IF 判斷1 (
set AAA=XYZ
)
IF 判斷1 (
指令 %AAA%
)
--------------------
就正常運作

總之...感謝啦XD

使用道具

該用戶從未簽到

發表於 2016-9-3 11:52 | 顯示全部樓層
jmsdhn 發表於 2016-9-2 18:40
感謝釐清
畢竟如果沒人證實一下
可能會一直想下去

我這樣寫是可以的:

@echo off
IF 1==1 (
set AAA=XYZ
@echo %AAA%
)

使用道具

該用戶從未簽到

 樓主| 發表於 2016-9-3 12:43 | 顯示全部樓層
本帖最後由 jmsdhn 於 2016-9-3 12:45 編輯

感謝肥文
不過
稍稍修改一下
照說應該是寫這樣吧
------------------------------
@echo off
IF 1==1 (
set AAA=XYZ
echo %AAA%
)
------------------------------
這樣會顯示
echo已關閉

不是set AAA=XYZ在外面
就是echo %AAA%在外面
似乎總之
兩者不能在同一個IF區塊內

使用道具

該用戶從未簽到

發表於 2016-9-3 14:20 | 顯示全部樓層
jmsdhn 發表於 2016-9-3 12:43
感謝肥文
不過
稍稍修改一下

沒幫上忙, 看來應該是 set 的關係.
只好換個方法寫了.

使用道具

該用戶從未簽到

發表於 2016-9-3 14:59 | 顯示全部樓層
jmsdhn 發表於 2016-9-3 12:43
感謝肥文
不過
稍稍修改一下

試試看這樣:

@echo off
Setlocal EnableDelayedExpansion
IF 1==1 (
set AAA=XYZ
echo !AAA!
)

使用道具

該用戶從未簽到

 樓主| 發表於 2016-9-3 18:44 | 顯示全部樓層
真的可以耶!
為何Setlocal EnableDelayedExpansion可以這樣
而且%變成!

為何會知道要改成!呢
不是很懂Setlocal/?在說甚麼
而且好像也沒說到應該用!來代替%啊!!!
這是哪裡的知識呢

太驚訝了
先感謝
希望能用到其他指令中

使用道具

該用戶從未簽到

發表於 2016-9-3 23:08 | 顯示全部樓層
jmsdhn 發表於 2016-9-3 18:44
真的可以耶!
為何Setlocal EnableDelayedExpansion可以這樣
而且%變成!

在 set 的說明內
  1. 延遲環境變數展開讓您可以用一個不同的字元 (驚嘆號) 在執行時展開
  2. 環境變數。如果啟用了延遲環境變數展開,上面的例子可以被改寫如下
  3. 而正常作用:

  4.     set VAR=before
  5.     if "%VAR%" == "before" (
  6.         set VAR=after
  7.         if "!VAR!" == "after" @echo If you see this, it worked
  8.     )

  9.     set LIST=
  10.     for %i in (*) do set LIST=!LIST! %i
  11.     echo %LIST%
複製代碼

使用道具

該用戶從未簽到

 樓主| 發表於 2016-9-4 10:02 | 顯示全部樓層
set/?的解釋確實有說到用!來代替%了
在這個指令Setlocal EnableDelayedExpansion之後
%VAR%甚至等於!VAR!
兩者可以同時存在來寫

總敘述雖然還不能完全理解
但是至少知道延遲環境變數展開(總覺得"延遲"怪怪的)
應該是在解IF內部的其他複合敘述問題
且必須在IF內的複合敘述(for/if等等)改用!VAR!吧

感謝幫忙理解
真的是需要用到時才會理解的東西
就像開機討論區的東東
個人還沒遇過就無法理解一樣
3Q~

使用道具

您需要登入後才可以回帖 登入 | 註冊

本版積分規則

Discuz! X

© 2009-2017 Microduo

快速回覆 返回頂部 返回列表