批处理感叹号变量

2024-09-27 09:26:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

setlocal EnableDelayedExpansion

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

我不明白什么

^{pr2}$

是的。


Tags: in脚本fordirfilenamedosetpr2
3条回答

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

code block(一系列带圆括号的行)中,当遇到调用块的语句(a forif)时,%var%将被{}的值替换,而不是由于块的操作而变化的var的值(即run-time值)。在

delayedexpansion被调用时,%var%仍然返回原始的parse-time值,但是!var!返回{}值,因此在本例中,filename在循环进行过程中,每个值%%x附加到它后面。(注意:批处理变量的长度限制为8180个字符[实际上,variablename的长度为8191个])

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

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

另外,默认的/f选项"tokens=1 delims= "将用空格截断文件名。在

Magoo很好地解释了其他问题。在

批处理脚本正在生成OPATH目录文件名的空格分隔列表。使用Pythonglob获得与列表相同的东西是非常容易的。在

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

这将生成一个文件名列表。目录名将具有九月在他们的最后。对于Python代码来说,这可能比使用空格分隔符的单个字符串更容易处理。在

如果必须使用空格分隔的字符串,则可以很容易地将它们连接起来。在

^{pr2}$

相关问题 更多 >

    热门问题