批处理标记变量

时间:2017-09-03 21:32:10

标签: python windows shell batch-file cmd

我将批处理脚本转换为Python。我被困在这里:

setlocal EnableDelayedExpansion

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

我不明白

set "FILENAME=!FILENAME! %%x"

确实

3 个答案:

答案 0 :(得分:4)

通常,%var%会检索var的值。

code block(带括号的系列行)中,当%var%语句调用块(var或者for时,if将替换为var的值遇到了run-time},而不是delayedexpansion的值,因为它因块的操作(%var%值)而变化。

调用parse-time后,!var!仍会返回原始run-time值,但filename会返回%%x值,因此在这种情况下,随着循环的进行,ggplot将每个值plotly附加到其上。 (注意:批处理变量中有~8180个字符的限制[实际上,变量名的长度为8191])

答案 1 :(得分:2)

for循环将所有找到的dir条目连接到一个字符串。

BTW / d的/ B覆盖/ D,因此可以省略。

此外,/ f选项"tokens=1 delims= "的默认值将截断带有空格的文件名。

Magoo解释了其他问题。

答案 2 :(得分:1)

批处理脚本生成一个空格分隔的OPATH目录文件名列表。使用Python glob来获得与列表相同的东西是很容易的。

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

这将生成文件名列表。目录名称末尾会有一个os.sep。对于Python代码来说,这可能比使用空格分隔符的单个字符串更容易处理。

如果您必须有一个以空格分隔的字符串,则可以轻松地将它们连接起来。

dstring = ' '.join(dlist)