在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
现在这是做的:
这将根据列表插入文本文件的全部内容。 我可以修改它吗,所以
"<!--"
#201508081213 ###201609101219
到
#201508081213
TEXT
###201609101219
TEXT
我正在使用此工具将Outlines(仅使用文件名)转换为用于撰写文章和博客的粗略文本初稿
答案 0 :(得分:0)
@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个标题的位置未知。
我在标准流3中留下了您的消息
了解<!--
测试的操作。
标准流1是发送到文件的输出。
将文件output.txt
回显到文本之前将其删除。
第一个for
循环读取filelist.txt
文件的每一行。
嵌套的for
循环使用通配符获取文件名。
每个用于标记call
的{{1}}都传递一个文件名的参数。
在:read
的标签中,回显文件名。
:read
循环从文件名读取行。
每行存储在名为for
的变量中。
嵌套的line
循环将使用for
进行扩展
变量call echo
并返回前4个字符。
进行比较以测试它是否为line
,如果是,
<!--
2个换行符,然后退出标签。
如果不是,请echo
每行。 echo
的2个换行符在
退出前标签的末尾。