2017年7月28日 星期五

[Batch]About variable expansion tip an trick!

最近在用Bat Script在寫一些自動化的東西, 卻發現了一些非常奇怪的問題

比如說以下我想用FOR迴圈去批次執行一個陣列

::
@ECHO OFF
FOR %%A IN (First:1 Second:2 Third:3) DO (
        SET "VAR=%%A"
        SET "VAR=%VAR::=_%"
        ECHO %VAR%
)

這樣子執行下去 是不會Print 任何東西的

為什麼會這樣子呢...因為在一開始 Bat就會把他的變數(包在%中) 擴展

所以第二個指定就變成這樣 :

SET "VAR="

事實上 對Bat而言 他看到的程式碼應該會變成這樣 :
SET "VAR=First:1"
SET "VAR="
ECHO %VAR%

SET "VAR=Second:2"
SET "VAR="
ECHO %VAR%

SET "VAR=Third:3"
SET "VAR="
ECHO %VAR%

也就是一開始就會進行擴張解釋!

解決方法是甚麼呢?

首先 要在開頭加上
SETLOCAL EnableDelayedExpansion

這可以開啟Bat 的延遲擴解

然後對於要操作的變數 將%置換成!

::
@ECHO OFF
FOR %%A IN (First:1 Second:2 Third:3) DO (
        SET "VAR=%%A"
        SET "VAR=!VAR::=_!"
        ECHO !VAR!
)

像這樣

就可以成功Print出我們要的結果了

First_1
Second_2
Third_3

Chiaxin



[Python2]Magic operate in List type

Recently I found a nice operator in Python list

# code :
a_simple_array = [1, 2, 3, 4, 5, 6]
a_simple_array[::2] = ('one', 'three', 'five')
print a_simple_array
#
# result :
['one', 2, 'three', 4, 'five' 6]
# End code

原來Python 的Array 可以這樣子去Insert! Magic...