CMD:合并文件 将日期和文件名回显到合并文件
CMD : Merge Files Echo date and file name to merged file
我使用下面的代码将 .cpp 文件合并到 directory.This 代码中,这是超级用户提出问题的结果,但没有回复,因为我的问题是 edited.So 请不要将此问题标记为重复。
@echo off
cd C:\test
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >merged.html
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : //Here i want the file name of each program without .cpp extension
echo Description :
echo Author : Name
echo Date : //Here i want the date associated with each file DD-MM-YYYY
echo.
type "%%f"
echo ^</pre^>
) >> merged.html
echo ^</body^>^</html^> >> merged.html
当前Merged.html文件
File name :
Desciption :
Author : Name
Date :
#include
int main()
{
.....
.....
.....
}
Then the second file on the next page .
上述代码有问题
它省略了头文件名,即
在原始文件中我有#include 但在合并文件中
我只是 #include.I 猜测问题是由于“<”和“>”造成的。
我需要什么
我需要在日期之后与合并文件中的每个程序文件关联的日期:(请参阅上面的代码,阅读注释部分)。此外,我还需要在文件名之后的每个程序的文件名:如 abc(没有文件中的扩展名 .cpp)。
@ECHO Off
SETLOCAL
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >u:\newfile.txt
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : %%~nf
echo Description :
echo Author : Name
FOR /f %%d IN ("%%~tf") DO echo Date : %%d
echo.
type "%%f"
echo ^</pre^>
)>>u:\newfile.txt
echo ^</body^>^</html^> >> u:\newfile.txt
GOTO :EOF
生成 u:\newfile.txt。我将您的 cd
删除到您的源目录以适合我的测试。
文件名比较简单,只是 %%~nf
- 从提示 for
上查看文档
for /?
你没有告诉我们你的日期使用什么格式,所以操纵它本身就是一个主题(已经在 SO 上多次讨论过)。我使用的格式是 dd/mm/yy hh:mm:ss
所以我可以使用默认的 tokens=1delims=
。如果看起来很可能,您正在使用 DDDday dd-mm-yy hh:mm:ss
那么您需要使用 FOR /f "tokens=2" %%d IN...
我发现 .cpp
文件中的重定向器没有问题(但请不要假设人们有样本或熟悉它们。)
现在 - 维护它真的很痛苦,因为您需要一遍又一遍地重新编辑文件以插入名称和描述。
试试这个:
@ECHO Off
SETLOCAL
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >u:\newfile.txt
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : %%~nf
SET "namefound="
FOR /f "tokens=1,2,3delims=|" %%p IN (q29056600.txt) DO IF /i "%%p"=="%%~nxf" (
echo Description : %%q
echo Author : %%r
SET namefound=Y
)
IF NOT DEFINED namefound (
echo Description :
echo Author : Name
)
FOR /f %%d IN ("%%~tf") DO echo Date : %%d
echo.
type "%%f"
echo ^</pre^>
)>>u:\newfile.txt
echo ^</body^>^</html^> >> u:\newfile.txt
GOTO :EOF
文件 q29056600.txt
包含
hello.cpp|Hello World version 1|Fred Nurk
helloworld.cpp|Hello World version Two|Joe Bloggs
即文件名描述自动用竖线分隔。额外代码
- 清除标志
namefound
- 读取您的描述文件。如果找到匹配项,则输出描述和作者并设置标志
- 如果未设置标志(在文件中未找到文件名),则生成您的虚拟行
这是上面的 author
行。您只需要从支持文件中省略作者栏。
@ECHO Off
SETLOCAL
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >u:\newfile.txt
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : %%~nf
SET "namefound="
FOR /f "tokens=1,2delims=|" %%p IN (q29056600.txt) DO IF /i "%%p"=="%%~nxf" (
echo Description : %%q
SET namefound=Y
)
IF NOT DEFINED namefound (
echo Description :
)
echo Author : Name
FOR /f %%d IN ("%%~tf") DO echo Date : %%d
echo.
type "%%f"
echo ^</pre^>
)>>u:\newfile.txt
echo ^</body^>^</html^> >> u:\newfile.txt
GOTO :EOF
至于缺少文本的问题:我怀疑您没有使用像 notepad
这样的文本编辑器查看文件,而是使用了一些 HTML 查看器,所以缺少的数据是被解释为 HTML.
如果我对 <>
问题的看法是正确的,那么以下可能是解决方法:
@ECHO Off
SETLOCAL
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >u:\newfile.txt
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : %%~nf
SET "namefound="
FOR /f "tokens=1,2delims=|" %%p IN (q29056600.txt) DO IF /i "%%p"=="%%~nxf" (
echo Description : %%q
SET namefound=Y
)
IF NOT DEFINED namefound (
echo Description :
)
echo Author : Name
FOR /f %%d IN ("%%~tf") DO echo Date : %%d
echo.
TYPE "%%f"|sed "s/\x3c/\<\x3b/g;s/\x3e/\>\x3b/g;s/\x25/\%\x3b/g"
echo ^</pre^>
)>>u:\newfile.txt
echo ^</body^>^</html^> >> u:\newfile.txt
GOTO :EOF
请注意,这包括 sed
- 一个免费的实用程序。我用的是 GNUSED。
我使用下面的代码将 .cpp 文件合并到 directory.This 代码中,这是超级用户提出问题的结果,但没有回复,因为我的问题是 edited.So 请不要将此问题标记为重复。
@echo off
cd C:\test
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >merged.html
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : //Here i want the file name of each program without .cpp extension
echo Description :
echo Author : Name
echo Date : //Here i want the date associated with each file DD-MM-YYYY
echo.
type "%%f"
echo ^</pre^>
) >> merged.html
echo ^</body^>^</html^> >> merged.html
当前Merged.html文件
File name :
Desciption :
Author : Name
Date :
#include
int main()
{
.....
.....
.....
}
Then the second file on the next page .
上述代码有问题
它省略了头文件名,即
在原始文件中我有#include 但在合并文件中 我只是 #include.I 猜测问题是由于“<”和“>”造成的。
我需要什么
我需要在日期之后与合并文件中的每个程序文件关联的日期:(请参阅上面的代码,阅读注释部分)。此外,我还需要在文件名之后的每个程序的文件名:如 abc(没有文件中的扩展名 .cpp)。
@ECHO Off
SETLOCAL
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >u:\newfile.txt
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : %%~nf
echo Description :
echo Author : Name
FOR /f %%d IN ("%%~tf") DO echo Date : %%d
echo.
type "%%f"
echo ^</pre^>
)>>u:\newfile.txt
echo ^</body^>^</html^> >> u:\newfile.txt
GOTO :EOF
生成 u:\newfile.txt。我将您的 cd
删除到您的源目录以适合我的测试。
文件名比较简单,只是 %%~nf
- 从提示 for
上查看文档
for /?
你没有告诉我们你的日期使用什么格式,所以操纵它本身就是一个主题(已经在 SO 上多次讨论过)。我使用的格式是 dd/mm/yy hh:mm:ss
所以我可以使用默认的 tokens=1delims=
。如果看起来很可能,您正在使用 DDDday dd-mm-yy hh:mm:ss
那么您需要使用 FOR /f "tokens=2" %%d IN...
我发现 .cpp
文件中的重定向器没有问题(但请不要假设人们有样本或熟悉它们。)
现在 - 维护它真的很痛苦,因为您需要一遍又一遍地重新编辑文件以插入名称和描述。
试试这个:
@ECHO Off
SETLOCAL
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >u:\newfile.txt
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : %%~nf
SET "namefound="
FOR /f "tokens=1,2,3delims=|" %%p IN (q29056600.txt) DO IF /i "%%p"=="%%~nxf" (
echo Description : %%q
echo Author : %%r
SET namefound=Y
)
IF NOT DEFINED namefound (
echo Description :
echo Author : Name
)
FOR /f %%d IN ("%%~tf") DO echo Date : %%d
echo.
type "%%f"
echo ^</pre^>
)>>u:\newfile.txt
echo ^</body^>^</html^> >> u:\newfile.txt
GOTO :EOF
文件 q29056600.txt
包含
hello.cpp|Hello World version 1|Fred Nurk
helloworld.cpp|Hello World version Two|Joe Bloggs
即文件名描述自动用竖线分隔。额外代码
- 清除标志
namefound
- 读取您的描述文件。如果找到匹配项,则输出描述和作者并设置标志
- 如果未设置标志(在文件中未找到文件名),则生成您的虚拟行
这是上面的 author
行。您只需要从支持文件中省略作者栏。
@ECHO Off
SETLOCAL
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >u:\newfile.txt
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : %%~nf
SET "namefound="
FOR /f "tokens=1,2delims=|" %%p IN (q29056600.txt) DO IF /i "%%p"=="%%~nxf" (
echo Description : %%q
SET namefound=Y
)
IF NOT DEFINED namefound (
echo Description :
)
echo Author : Name
FOR /f %%d IN ("%%~tf") DO echo Date : %%d
echo.
type "%%f"
echo ^</pre^>
)>>u:\newfile.txt
echo ^</body^>^</html^> >> u:\newfile.txt
GOTO :EOF
至于缺少文本的问题:我怀疑您没有使用像 notepad
这样的文本编辑器查看文件,而是使用了一些 HTML 查看器,所以缺少的数据是被解释为 HTML.
如果我对 <>
问题的看法是正确的,那么以下可能是解决方法:
@ECHO Off
SETLOCAL
echo ^<html^>^<head^>^<style^> pre {page-break-after: always;} ^</style^>^</head^>^<body^> >u:\newfile.txt
for /r %%f in (*.cpp) do (
echo ^<pre^>
echo File Name : %%~nf
SET "namefound="
FOR /f "tokens=1,2delims=|" %%p IN (q29056600.txt) DO IF /i "%%p"=="%%~nxf" (
echo Description : %%q
SET namefound=Y
)
IF NOT DEFINED namefound (
echo Description :
)
echo Author : Name
FOR /f %%d IN ("%%~tf") DO echo Date : %%d
echo.
TYPE "%%f"|sed "s/\x3c/\<\x3b/g;s/\x3e/\>\x3b/g;s/\x25/\%\x3b/g"
echo ^</pre^>
)>>u:\newfile.txt
echo ^</body^>^</html^> >> u:\newfile.txt
GOTO :EOF
请注意,这包括 sed
- 一个免费的实用程序。我用的是 GNUSED。