2017-09-03 90 views
1

我正在將批處理腳本轉換爲Python。我被困在這裏:批處理感嘆號變量

setlocal EnableDelayedExpansion 

for /F %%x in ('dir /B/D %OPATH%') do (
    set "FILENAME=!FILENAME! %%x" 
) 

,我不明白是什麼

set "FILENAME=!FILENAME! %%x" 

一樣。

回答

4

通常,%var%檢索值爲var

在一個code block(一個parenthesised一系列的線),%var%將通過var值替換時調用所述塊語句(一個forif)時遇到的var不是值,因爲它改變由於該塊的操作(值爲run-time)。

當調用delayedexpansion%var%仍返回原始的,parse-time值,但!var!返回的run-time值,所以在這種情況下,具有filename附加到它的循環進行的%%x每個值。 (注意:批處理變量中的限制爲〜8180個字符[實際上是8191-變量名的長度])

2

for循環將所有找到的dir條目連接到一個字符串。

順便說一下,Dir的/ B覆蓋/ D,所以可以省略。

另外,/ f選項"tokens=1 delims= "的默認值將以空格截斷文件名。

Magoo解釋了其他問題的罰款。

1

批處理腳本正在生成OPATH目錄文件名的空格分隔列表。很容易使用Python glob來獲得與列表相同的內容。

import os 
import glob 
dlist = glob.glob(os.environ['OPATH'] + os.sep + '*') 

這將產生文件名列表。目錄名將在它們的最後有一個os.sep。這可能比使用空格分隔符的單個字符串更容易處理您的Python代碼。

如果您必須有一個空格分隔的字符串,他們可以很容易地加入。

dstring = ' '.join(dlist)