当前位置: 首页 > 知识库问答 >
问题:

Dir/b/s在cmd.exe和批处理文件中不同

段劲
2023-03-14

我想知道为什么cmd.exe中的dir/b/s c:\*.*和批处理文件之间会有延迟。

for /f "tokens=*" %%a in ('dir/b/s c:\*.*') do (
echo "%%a" 
copy "%%a" C:\windows\ )

共有1个答案

方奕
2023-03-14

有两个因素导致这种行为

  • for/f将始终检索它需要处理的所有数据,然后才开始处理它。Than意味着for/f将在dir工作时“静止”(不执行do子句中的代码),等待所有数据。
  • for/f读取磁盘文件时,它将“简单地”修改一个足够大的缓冲区,以便将文件加载到内存中,加载文件并开始处理它。但当数据源是命令执行时,不知道数据的最终大小,则在检索命令输出时定义缓冲区并根据需要调整其大小。

检索所有数据的需要和调整缓冲区大小的过程是导致延迟的原因。

    null

如果需要删除延迟,请不要为/f使用。一个更好的选择(同时保持类似的方法)可以是

for /r "c:\" %%a in (*) do (
    echo "%%~fa"
)

也就是说,在指定的起始文件夹中使用for命令的递归版本。

 类似资料:
  • 问题内容: 编写批处理文件以使Windows框上的某些文件自动化时,我需要暂停执行几秒钟(通常在测试/等待循环中,等待进程启动)。当时,我能找到的最佳解决方案是使用ping(我不告诉你),以达到预期的效果。我已经找到了更好的写了它在这里,它描述了一个可调用“wait.bat”,实现如下: 然后,您可以在自己的批处理文件中包含对wait.bat的调用,传递进入睡眠的秒数。 显然Windows 200

  • 需要读取spring批处理中的文件,对其进行处理并将其作为一个提要保存。一个提要包含50%的信息。当我必须持久化提要的最终结果时,我需要使用公共字段将它们组合起来,并像一个项目一样持久化。请参见下面的示例。 我需要保留的最终信息如下: 请建议我如何在我的Spring批工作中实现这一点。 谢谢

  • 主要内容:创建批处理文件,保存批处理文件,执行批处理文件,修改批处理文件在本章中,我们将学习如何创建,保存,执行和修改批处理文件。 创建批处理文件 批处理文件通常在记事本中创建。 因此,最简单的方法是打开记事本并输入脚本所需的命令。 对于这个练习,打开记事本并输入以下语句。 保存批处理文件 在创建批处理文件后,下一步是保存批处理文件。 批处理文件的扩展名为或。 命名批处理文件时需要注意的一些常规规则 - 在命名批处理文件时避免使用空格,有时会在从其他脚本中调用时产生问

  • 问题内容: 在编写批处理文件以自动执行Windows框上的某些操作时,我需要将其执行暂停几秒钟(通常在测试/等待循环中,等待进程启动)。当时,我能找到的最佳解决方案是使用ping(我不骗你)来达到预期的效果。我已经找到了更好的写了它在这里,它描述了一个可调用“wait.bat”,实现如下: 然后,你可以在自己的批处理文件中包含对wait.bat的调用,传递进入睡眠的秒数。 显然Windows 20

  • 我有一个包含多个json文件的zip文件。我已解压缩它们,然后使用以下代码从json获取POJO对象: 但我需要使用spring批处理逐个处理这些json文件。有人能帮助我如何在spring批处理中实现这一点吗?我想使用1000块来读取json文件。我的json对象非常复杂。例子:

  • 我正在尝试在批处理文件中定义和使用变量。看起来应该很简单: 我得到的输出如下: 这是怎么回事?为什么我的变量没有被回声?