【问题标题】:explanation for call expansion failing呼叫扩展失败的解释
【发布时间】:2017-03-25 23:52:26
【问题描述】:

我正在寻找一些技巧来解决调用扩展 t、z 和 a 失败的问题。

例子:

for /F "delims=" %%F in (
  'dir /b "%source%\*." '
) do if not exist "%target%\%%~nF.jpg" copy "%source%\%%~F" "%target%\%%~nF.jpg"

for /F "delims=" %%B in (
  'dir /b "%target%\*.jpg"'
) do echo Size: %%~fB

这个例子运行得很好,但是当我将最后一行编辑为

%%~zB

我得到多行输出,只是说大小:

另外,如果我只是运行

for /F "delims=" %%B in (
  'dir /b "%target%\*.jpg"'
) do echo Size: %%~zB

在一个批处理文件中,它按预期运行,显示实际文件大小。我对 %~a 和 %~t 进行了同样的尝试,得到了相同的结果;与其他复制序列一起运行时没有输出,单独运行时输出正确。

不确定这里发生了什么,因为 %~f 工作正常。感谢任何可以提供帮助的人。我不想运行两个批处理文件。恕我直言,这不是必需的。

【问题讨论】:

    标签: batch-file substitution expand modifiers


    【解决方案1】:

    我建议您使用%%~fB 仔细检查输出。该报告可能显示的是当前目录,而不是%target%(至少,它对我有用...)

    修复:

    PUSHD %target%
    
    for /F "delims=" %%B in (
      'dir /b "*.jpg"'
    ) do echo Size: %%~zB
    
    POPD
    

    【讨论】:

    • 优胜者!谢谢你的建议。事实证明,当我运行较短的版本时,我是从包含所有目标文件的目录中运行它的。现在回到绘图板,看看我是否可以从目标目录之外让它工作......除非你可以预先告诉我它不会工作,为我节省一些理智......
    • 刚刚放弃并承担了 PUSHD 和 POPD 命令。西线现在一切都平静了。再次感谢!
    猜你喜欢
    • 2020-04-18
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2023-03-04
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多