管道 FOR 命令,只有第一个输出被重复复制

管道 FOR 命令,只有第一个输出被重复复制

为了解决这个问题,我尝试使用两个 Windows CLI 工具 dsfo.exe 和 dsfi.exe 设计一个命令(来自DS 文件操作套件)。dsfo 工具可以从文件中提取数据块并将其输出为新文件。dsfi 工具可以将数据块写入现有文件。我想要复制位于恢复的 M2TS 视频文件的文件夹中每个文件偏移量为 1024 的 16 个字节,将它们粘贴到文本文件中,然后添加换行符。(这应该可以作为 WinHex 的搜索词列表。)由于上述两个工具只能处理一半的过程,我尝试将第一个工具的输出通过管道传输到第二个工具的输入中,但我无法得到预期的结果——从第一个解析文件复制的字符串被重复复制。

uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
uàý¸n6)‹Û·žB`n
...

使用的命令:

L:
CD "L:\HGST 4To\Extra Found Files\Multimedia Video\MPEG Transport Stream Video"
FOR %%F in (*.mts) DO (
    SETLOCAL EnableDelayedExpansion
    "dsfo.exe" %%F 1024 16 - | "C:\Logiciels autonomes\dsfok\dsfi.exe" "G:\HGST_recherche_fragments.txt" e 0 -
    "dsfi.exe" "G:\HGST_recherche_fragments.txt" e 0 "G:\0D0A.txt"
    ENDLOCAL
)

(0D0A.txt 文件仅包含一个换行符,十六进制为 0D 0A。我不知道是否有更优雅的方式使用本机命令将换行符添加到文本文件,但至少那部分按预期工作。)
(我不确定“EnabledDelayedExpansion”在这种情况下是否有用,有或没有我得到的结果都相同。问题似乎出在管道上,而不是循环变量上:命令的显示输出表明文件名在每次迭代中都正确更新,但由于某种原因,通过管道传输到命令后半部分的输出始终是第一次迭代的输出。)

为什么我会得到这个结果,我该如何修复它?
有没有更好的方法来实现预期的结果?(例如,一个 CLI 工具能够在一个命令中执行整个操作 - 就像 Linux 系统上的 ddrescue,我曾经用它做过一次相似的东西,即将数据块从一个文件直接复制到另一个文件中。)

(当然,一种解决方法是首先使用 dsfi 将每个文件中的 16 字节块提取到实际的 16 字节文件中,然后使用该文件作为 dsfo 的输入,但这会创建数千个中间文件,如果可能的话我想避免这种情况——因为整个操作的目标是减少混乱,我不希望在此过程中添加更多混乱。)

谢谢。

相关内容