如何使用DOS命令移除文本行前37列提取目标文件名
DOS命令移除文本每行前37列提取文件名实现方案
场景说明
待处理的文本文件每行是带日期、时间、文件大小、文件名的固定前缀格式,示例行:
19/06/2022 11:05 38.841 2022.07.18-22.07.CPUUsage.txt
需要删除每行开头前37个字符,仅保留末尾的文件名部分。
方案1:批处理脚本实现(稳定适配大文件)
- 提前确认两个文件路径:
- 原始待处理文件,示例命名为
filelist.txt - 处理后结果输出文件,示例命名为
result.txt
- 原始待处理文件,示例命名为
- 新建后缀为
.bat的批处理文件,写入以下代码:
@echo off :: 处理中文编码避免乱码 chcp 65001 >nul set "source=filelist.txt" set "target=result.txt" :: 清空已有结果文件 type nul > "%target%" :: 逐行读取内容做字符串截取 setlocal enabledelayedexpansion for /f "usebackq delims=" %%line in ("%source%") do ( set "content=%%line" :: 字符串索引从0开始计数,~37代表跳过前37个字符取剩余内容 echo !content:~37!>> "%target%" ) endlocal echo 处理完成,结果已存入%target% pause
- 将批处理文件和待处理的
filelist.txt放在同一目录,双击运行即可。
注意:如果实际统计的前缀长度和37有偏差,直接修改代码里!content:~37!的数字即可,比如需要跳过38个字符就改成!content:~38!
方案2:命令行单行执行(无需写脚本)
打开cmd切换到待处理文件所在目录,直接执行以下命令即可完成处理:
cmd /v:on /c "for /f "usebackq delims=" %l in ("filelist.txt") do @set "s=%l" & @echo !s:~37!>>result.txt"
执行完成后当前目录下生成的result.txt就是提取完文件名的结果文件。
补充技巧
如果你的待处理文件本身是dir命令导出的列表,不需要处理已有存量文件的话,直接执行以下命令就能直接输出纯文件名列表,省去字符串截取步骤:
dir /b *.txt > result.txt
内容的提问来源于stack exchange,提问作者Luciano
相关产品推荐
相关产品推荐

