loops - 如何使用 findstr 在分隔符字符串之后提取二进制文件的一部分?
问题描述
两个文件(二进制或非二进制)可以以特定方式连接到一个文件,它们之间有一个特定的分隔符字符串,仅使用控制台命令。稍后可以通过以下简单方法提取第二个文件°,再次仅使用控制台命令:
@echo off
setlocal enableextensions enabledelayedexpansion
REM === JOINING FILES ===
REM Divider.txt must consist of a line starting with "di-vi-der"
REM preceeded by at least one line and followed by a blank line.
echo This is a necessary preceeding line. > Divider.txt
echo di-vi-der This line must be followed by a blank line. >> Divider.txt
REM Join files to Joined.bin by one of these two methods:
REM copy /b FirstFile.exe + /a Divider.txt + /b File2BeExtracted.exe /b Joined.bin
type FirstFile.exe Divider.txt File2BeExtracted.exe > Joined.bin
REM === UNJOINING FILES ===
REM Get the line number of the dividing line in Joined.bin:
for /F "delims=:" %%a in ('findstr /N "^di-vi-der" "Joined.bin"') do set "lines=%%a"
REM Extract the part of the Joined.bin following the divider line:
< "Joined.bin" (
REM Pass thru the first lines:
for /L %%i in (1,1,%lines%) do set /P "="
REM Copy the rest to Output.bin:
findstr "^"
) > Output.bin
这几乎完美无缺。
我的第一个(也是主要)问题是:findstr 在写入 Output.bin 的最后一行末尾添加 0D 0A。这怎么可能纠正?
第二个问题可能是:由于 findstr 命令的一些限制(行的最大长度),此方法在某些(罕见?)情况下可能会失败。为了检测这种情况,可以确定 File2BeExtracted.exe 的文件大小并将其存储在分隔线中,以便在提取文件后进行最终身份检查。如何做到这一点?
解决方案
推荐阅读
- python - 将行添加到数据框中,这些行是数据框的乘积,python
- sql - 获取最新的时间戳值
- java - 在 Kotest 单元测试运行时抛出 NoClassDefFoundError
- php - 向在 WooCommerce 中完成提交产品评论的用户发送电子邮件
- css - 如何在 CSS 中编写和转换 Adobe 模糊属性值?
- node.js - 带有索引的简单 Mongo 查找的高负载
- macos - 在 M1 Mac 上构建 docker 映像失败:“msse2”无法识别
- php - 如何在 PHP 中回显可点击的 URL?
- reactjs - handleSubmit 反应钩子形式不起作用,它不执行 onSumbmit
- php - 数组函数中的打印结果不同