批处理脚本:将 .txt 列表中的内容合并到一个文件
Batch Script: Merge Content From .txt List to one file
在 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
关于 !
在 <!--
中的已知用法。
使用 call
即使 <
和其他一些字符
可能会导致问题。
for /f
循环通常不处理空行所以
希望这不是问题。
层次结构取决于 filelist.txt
中的顺序。
文档的结构可能会有所不同,我无法考虑
正确的顺序可能是什么。使用通配符给出
有些怀疑。文件名 #a
会找到 #a1
和 #a2
所以
3 个标题的位置未知。
我在 std 流中留下了 3 条消息给你
通过 <!--
测试了解操作。
标准流 1 是进入文件的输出。
操作
文件 output.txt
在回显文本到文件之前被删除。
第一个 for
循环读取 filelist.txt
文件的每一行。
嵌套的 for
循环获取带有通配符的文件名。
每个 call
到标签 :read
传递一个文件名的参数。
在:read
的标签中回显文件名。
for
循环从文件名中读取行。
每行都存储在名为 line
的变量中。
嵌套的for
循环会使用call echo
展开
变量 line
并回显前 4 个字符。
进行比较以测试它是否为 <!--
,如果是,
echo
2 个换行符,然后退出标签。
如果不是,每行 echo
。 echo
2 个换行符完成于
退出前标签的结尾。
在 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
关于 !
在 <!--
中的已知用法。
使用 call
即使 <
和其他一些字符
可能会导致问题。
for /f
循环通常不处理空行所以
希望这不是问题。
层次结构取决于 filelist.txt
中的顺序。
文档的结构可能会有所不同,我无法考虑
正确的顺序可能是什么。使用通配符给出
有些怀疑。文件名 #a
会找到 #a1
和 #a2
所以
3 个标题的位置未知。
我在 std 流中留下了 3 条消息给你
通过 <!--
测试了解操作。
标准流 1 是进入文件的输出。
操作
文件 output.txt
在回显文本到文件之前被删除。
第一个 for
循环读取 filelist.txt
文件的每一行。
嵌套的 for
循环获取带有通配符的文件名。
每个 call
到标签 :read
传递一个文件名的参数。
在:read
的标签中回显文件名。
for
循环从文件名中读取行。
每行都存储在名为 line
的变量中。
嵌套的for
循环会使用call echo
展开
变量 line
并回显前 4 个字符。
进行比较以测试它是否为 <!--
,如果是,
echo
2 个换行符,然后退出标签。
如果不是,每行 echo
。 echo
2 个换行符完成于
退出前标签的结尾。