2024-09-27 09:26:48 发布
网友
我正在将批处理脚本转换为Python。我被困在这里了:
setlocal EnableDelayedExpansion for /F %%x in ('dir /B/D %OPATH%') do ( set "FILENAME=!FILENAME! %%x" )
我不明白什么
是的。
通常,%var%检索var的值。在
%var%
var
在code block(一系列带圆括号的行)中,当遇到调用块的语句(a for或if)时,%var%将被{}的值替换,而不是由于块的操作而变化的var的值(即run-time值)。在
code block
for
if
run-time
当delayedexpansion被调用时,%var%仍然返回原始的parse-time值,但是!var!返回{}值,因此在本例中,filename在循环进行过程中,每个值%%x附加到它后面。(注意:批处理变量的长度限制为8180个字符[实际上,variablename的长度为8191个])
delayedexpansion
parse-time
!var!
filename
%%x
for循环将所有找到的dir条目连接到一个字符串中。在
BTW dir的/B覆盖/D,因此可以省略。在
另外,默认的/f选项"tokens=1 delims= "将用空格截断文件名。在
"tokens=1 delims= "
Magoo很好地解释了其他问题。在
批处理脚本正在生成OPATH目录文件名的空格分隔列表。使用Pythonglob获得与列表相同的东西是非常容易的。在
glob
import os import glob dlist = glob.glob(os.environ['OPATH'] + os.sep + '*')
这将生成一个文件名列表。目录名将具有九月在他们的最后。对于Python代码来说,这可能比使用空格分隔符的单个字符串更容易处理。在
如果必须使用空格分隔的字符串,则可以很容易地将它们连接起来。在
通常,
%var%
检索var
的值。在在}的值替换,而不是由于块的操作而变化的
code block
(一系列带圆括号的行)中,当遇到调用块的语句(afor
或if
)时,%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目录文件名的空格分隔列表。使用Python
glob
获得与列表相同的东西是非常容易的。在这将生成一个文件名列表。目录名将具有九月在他们的最后。对于Python代码来说,这可能比使用空格分隔符的单个字符串更容易处理。在
如果必须使用空格分隔的字符串,则可以很容易地将它们连接起来。在
^{pr2}$相关问题 更多 >
编程相关推荐