我正在將批處理腳本轉換爲Python。我被困在這裏:批處理感嘆號變量
setlocal EnableDelayedExpansion
for /F %%x in ('dir /B/D %OPATH%') do (
set "FILENAME=!FILENAME! %%x"
)
,我不明白是什麼
set "FILENAME=!FILENAME! %%x"
一樣。
我正在將批處理腳本轉換爲Python。我被困在這裏:批處理感嘆號變量
setlocal EnableDelayedExpansion
for /F %%x in ('dir /B/D %OPATH%') do (
set "FILENAME=!FILENAME! %%x"
)
,我不明白是什麼
set "FILENAME=!FILENAME! %%x"
一樣。
通常,%var%
檢索值爲var
。
在一個code block
(一個parenthesised一系列的線),%var%
將通過var
值替換時調用所述塊語句(一個for
或if
)時遇到的var
不是值,因爲它改變由於該塊的操作(值爲run-time
)。
當調用delayedexpansion
,%var%
仍返回原始的,parse-time
值,但!var!
返回的run-time
值,所以在這種情況下,具有filename
附加到它的循環進行的%%x
每個值。 (注意:批處理變量中的限制爲〜8180個字符[實際上是8191-變量名的長度])
for循環將所有找到的dir條目連接到一個字符串。
順便說一下,Dir的/ B覆蓋/ D,所以可以省略。
另外,/ f選項"tokens=1 delims= "
的默認值將以空格截斷文件名。
Magoo解釋了其他問題的罰款。
批處理腳本正在生成OPATH目錄文件名的空格分隔列表。很容易使用Python glob
來獲得與列表相同的內容。
import os
import glob
dlist = glob.glob(os.environ['OPATH'] + os.sep + '*')
這將產生文件名列表。目錄名將在它們的最後有一個os.sep。這可能比使用空格分隔符的單個字符串更容易處理您的Python代碼。
如果您必須有一個空格分隔的字符串,他們可以很容易地加入。
dstring = ' '.join(dlist)