【问题标题】:Batch: Created variable in loop cannot be used outside批处理:循环中创建的变量不能在外部使用
【发布时间】:2021-07-21 17:33:34
【问题描述】:

我想使用批处理分析文件。该文件在顶层有一个文件夹。这个文件夹对每个文件都有不同的命名,但是每次只有一个文件夹(除了顶层的一些其他文件)。

要获取文件夹的路径,我的方法是遍历 FOR 中顶层的所有现有文件夹,并在每次迭代中创建路径名。因为每次我只有 1 次迭代时只有一个文件夹,如下所示:

setlocal enabledelayedexpansion

for /f "delims=" %%D in ('dir /a:d /b %temp_dir%') do (
    set "folderPath=%%~D"
    set "FullFolderPath=%temp_dir%\!folderPath!"
    echo !FullFolderPath!
)
echo %FullFolderPath%

问题:循环内的第一个回显输出了文件夹的正确路径,但第二个回显刚刚声明<ECHO OFF>

【问题讨论】:

  • 请提供您的代码的minimal reproducible example。就目前而言,它不完整或不可复制。
  • @Zilog80:我认为你混淆了一些东西。您所描述的对于 in 子句是正确的,但对于 do 子句则不是(您在链接的答案中成功证明了这一点)。 @SRel:您的代码对我来说似乎按预期工作(最后一行回显最后找到的文件夹名称或 ECHO is OFF 当没有匹配的文件夹时(因此根本不执行 do 子句)。
  • @Stephan 你说得对,我很困惑,这是针对 IN 子句而不是 DO 子句。我老了……
  • I'm old... - 我从你的用户名:D 中猜到了(能够这样做证明我可能在同一个范围内......)

标签: batch-file cmd


【解决方案1】:

问题是(我有 90% 的把握)第二个回声仍然在括号中。

如果它在any括号块中,用%号查询的变量的值将扩展为括号外设置的最后一个设置值。


你可能不小心在你的代码中留下了一个不平衡的括号,它没有崩溃,但仍然导致了这个问题。 您可以通过在每个括号块之前设置变量来解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多