batch-file - 批处理脚本:将 .txt 列表中的内容合并到一个文件
问题描述
在 Windows 10 上,我有这个.bat:
@echo off
for /f "delims=" %%i in (filelist.txt) do (
echo %%~nxi >> output.txt
type "%%~ni*" >> output.txt
echo. >> output.txt
echo. >> output.txt
)
Exit
现在这样做是:
- 读取filelist.txt,其中包含 .txt 文件的名称,例如: 20180808173105(没有“.txt”
- 搜索这些文件:20180808173105.txt
- 将文件名(不带“.txt”)复制到output.txt
- 插入文件内容
- 插入两个空行
- 对filelist.txt中命名的所有文件重复整个过程
- --> 效果很好!(或者您是否看到任何可能出现故障的异常情况?)
这将根据列表插入文本文件的全部内容。我可以修改它,所以
- 不是 .txt 的全部内容,而是仅插入其中的一部分?
例如,从“title:”之后到之前的所有内容
"<!--"
- 如果文件列表具有层次结构(大纲),则可以保留它,如下所示:
#201508081213 ###201609101219
至
#201508081213
TEXT
###201609101219
TEXT
我正在使用它来将大纲(仅使用文件名)转换为用于撰写文章和博客的粗略初稿
解决方案
@echo off
2> output.txt echo.
@>&3 (
echo Debug Information
echo -----------------
)
for /f "delims=" %%A in (filelist.txt) do (
for %%B in ("%%~nA*") do call :read "%%~B"
) >> output.txt
exit /b
:read
setlocal
set "line="
echo(%~nx1
for /f "usebackq delims=" %%C in ("%~1") do (
set "line=%%C"
for /f "tokens=*" %%D in ('call echo "%%line:~0,4%%"') do (
@>&3 echo File: "%~1" Test: %%D == "<!--"
if %%D == "<!--" (
@>&3 echo Found: "<!--"
echo.
echo.
exit /b 0
)
)
call echo(%%line%%
)
echo.
echo.
exit /b 0
笔记
不是这项任务的最佳语言。不得不避免
enabledelayedexpansion
已知使用!
in <!--
。call
即使使用<
,其他一些字符也可能会导致问题。
for /f
循环通常不会处理空行,所以希望这不是问题。
层次结构取决于filelist.txt
. 文档的结构可能会有所不同,我无法考虑正确的顺序可能是什么。使用通配符会产生一些疑问。#a
将找到一个文件名#a1
,#a2
因此 3 个标题的位置是未知的。
我在 std 流中留下了 3 条消息,供您了解<!--
测试操作。标准流 1 是到文件的输出。
手术
在将文本回显到文件之前,该文件output.txt
被擦除。
第一个for
循环读取文件的每一行filelist.txt
。嵌套for
循环使用通配符获取文件名。每个call
to 标签都:read
传递一个文件名的参数。
在 的标签中:read
,文件名被回显。循环从for
文件名中读取行。每一行都存储在名为 的变量中line
。嵌套for
循环将用于call echo
扩展变量line
并回显第一个 4 个字符。进行比较以测试是否是<!--
,如果
是,则使用echo
2 个换行符,然后退出标签。如果没有,echo
每一行。echo
退出前在标签末尾完成 2 个换行符。
推荐阅读
- node.js - 在带有 express-session 的 NodeJS 中使用安全 cookie 时会话不持久
- java - Hazelcast Spring Boot java.lang.ClassNotFoundException
- r - R DT::datatables 同时格式化多列
- angular - 为什么更改用户数据时会出现“未定义”错误?
- sql - SAS:PROC SQL:如何将字符格式列转换为时间格式
- javascript - 在Javascript函数中使用django对象的属性值
- sql-server - 可以从其他计算机从 SSMS 连接到 SQL Server,但无法从 powershell 连接到网络中的 SQL Server
- r - dplyr 选择助手的交集
- javascript - 使用 PHP & Javascript 获取文件输入的空白值以发送表单
- python - Python - pprint large dict 很好?