呼叫扩展失败的解释

explanation for call expansion failing

我正在寻找一些解决调用扩展 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 工作正常。感谢任何可以提供帮助的人。我不想 运行 两个批处理文件。恕我直言,应该没有必要。

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

修复:

PUSHD %target%

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

POPD