Windows 获取文件名并添加到每行开头的批处理脚本
我试图从.LOG文件中获取文件名,并将其附加到文件中每一行的开头,即sans扩展名,在文件名和行内容之间留一个空格。文件夹中有许多这样的文件,应该为文件夹中的每个.LOG文件执行脚本。示例文件名如下所示:Windows 获取文件名并添加到每行开头的批处理脚本,windows,batch-file,Windows,Batch File,我试图从.LOG文件中获取文件名,并将其附加到文件中每一行的开头,即sans扩展名,在文件名和行内容之间留一个空格。文件夹中有许多这样的文件,应该为文件夹中的每个.LOG文件执行脚本。示例文件名如下所示: 20160201.log 00:00:23 Left 4EEFD9 6.59418mA 0.00003mA OK 00:00:23 Right 4EEFEF 6.85377mA 0.00001mA OK 00:00
20160201.log
00:00:23 Left 4EEFD9 6.59418mA 0.00003mA OK
00:00:23 Right 4EEFEF 6.85377mA 0.00001mA OK
00:00:44 Left 4EEFDC 6.32207mA 0.00004mA OK
我想将文件名添加到文件中的每一行,如下所示:
20160201.log
00:00:23 Left 4EEFD9 6.59418mA 0.00003mA OK
00:00:23 Right 4EEFEF 6.85377mA 0.00001mA OK
00:00:44 Left 4EEFDC 6.32207mA 0.00004mA OK
要给出这一结果:
20160201 00:00:23 Left 4EEFD9 6.59418mA 0.00003mA OK
20160201 00:00:23 Right 4EEFEF 6.85377mA 0.00001mA OK
20160201 00:00:44 Left 4EEFDC 6.32207mA 0.00004mA OK
我看到了这个问题,但它引用了从文件名列表中提取文件名并分别放在每个条目的开头,所以这对我不起作用。我还查看了,但是由于我需要使用文件名而不是当前的系统时间,因此也无法正常工作。我没有任何代码可以提供…我无法使用从我发现的问题中得出的任何结论,我对批处理脚本是完全陌生的
编辑1:Magoo的代码 以下是我试图使用Magoo的答案运行的当前代码(请注意,注释是我为排除故障而添加的):
@ECHO关闭
SETLOCAL
设置“sourcedir=C:\Users\ckemmann\Desktop\Current”
设置“destdir=C:\Users\ckemmann\Desktop\Current\New”
::echo%sourcedir%@echo关闭
SETLOCAL
设置“sourcedir=U:\sourcedir\t w o”
设置“destdir=U:\destdir”
对于%%f IN(“%sourcedir%\*.log”)执行>%destdir%\%%~nf.out(
对于/f“usebackqdelims=“%%a IN(“%%f”)DO(
ECHO%%~nf%%a
)
)
后藤:EOF
您需要更改sourcedir
和destdir
的设置以适应您的环境
解码
从指定目录中获取与“*.log”匹配的文件,将其名称分配给%%f
在目标目录中创建一个新文件%%~nf
。读取从%%f
到%%a
和echo
的每一行,前缀为%%nf
和一些空格
%%~nf
仅指%%f
的名称部分
重定向程序
创建为一个新文件,并在其放置的位置,接受回送的输出到该文件中,而不是控制台的正常回送。@echo Off
@echo off
for /r "C:\PATH TO WHEREVER\" %%G in (*.log) do (
ren "%%~G" "reWrite.temp"
for /f "tokens=*" %%H in (reWrite.temp) do (
echo %%~nG %%H >> %%~nG.log
)
del "reWrite.temp"
)
pause
SETLOCAL
设置“sourcedir=U:\sourcedir\t w o”
设置“destdir=U:\destdir”
对于%%f IN(“%sourcedir%\*.log”)执行>%destdir%\%%~nf.out(
对于/f“usebackqdelims=“%%a IN(“%%f”)DO(
ECHO%%~nf%%a
)
)
后藤:EOF
您需要更改sourcedir
和destdir
的设置以适应您的环境
解码
从指定目录中获取与“*.log”匹配的文件,将其名称分配给%%f
在目标目录中创建一个新文件%%~nf
。读取从%%f
到%%a
和echo
的每一行,前缀为%%nf
和一些空格
%%~nf
仅指%%f
的名称部分
重定向器
创建为一个新文件,并在它被放置的位置,接受回送的输出到该文件中,而不是控制台的正常回送
@echo off
for /r "C:\PATH TO WHEREVER\" %%G in (*.log) do (
ren "%%~G" "reWrite.temp"
for /f "tokens=*" %%H in (reWrite.temp) do (
echo %%~nG %%H >> %%~nG.log
)
del "reWrite.temp"
)
pause
这将获取“C:\PATH TO where\”
中的所有.log
文件,重命名它们,并将文件名和数据逐行写入原始名称,完成后删除该文件@Magoo的答案显然比我的答案高,但不同的解决方案应该能帮助你理解解决未来欲望的不同方法
这将获取“C:\PATH TO where\”
中的所有.log
文件,重命名它们,并将文件名和数据逐行写入原始名称,完成后删除该文件@Magoo的答案显然优于我的答案,但不同的解决方案应该有助于您了解解决未来需求的不同方法。您是提供文件名,还是自动检测,还是从阿尔法半人马座传来?@Magoo-您是指提供文件名?我有一个满是这些.LOG文件的文件夹,我希望.bat脚本获取每个文件的文件名,打开该文件,在每行的开头添加不带扩展名的文件名,然后再次关闭它。我将澄清问题以匹配此评论。Magoo的回答可能更快,因为我有一个ren
和一个del
命令,但最终我们都有类似echo%stuff%>endFile.log的东西,正如我提到的,这是“缓慢”的罪魁祸首。您是提供文件名,还是自动检测,还是从半人马座阿尔法星射入?@Magoo-你是什么意思?我有一个满是这些.LOG文件的文件夹,我希望.bat脚本获取每个文件的文件名,打开该文件,在每行的开头添加不带扩展名的文件名,然后再次关闭它。我将澄清这个问题以匹配此评论。Magoo的回答可能更快,因为我有一个ren
和一个del
命令,但最终我们都有类似echo%stuff%>endFile.log
,正如我提到的,这是“缓慢”的罪魁祸首。您提供的脚本运行良好…但有一点需要注意。由于my.log文件相当长(每个文件几千行),批处理脚本的运行速度非常慢。我想知道是否有任何方法可以加速这个脚本。缓慢的部分几乎可以肯定是写新行,我想没有办法避免这一点@马古的回答也是这样。至少这可以在后台运行,而不必关注它。谢谢。您提供的脚本运行良好…但有一点需要注意。由于my.log文件相当长(每个文件几千行),批处理脚本的运行速度非常慢。我想知道是否有任何方法可以加速这个脚本。缓慢的部分几乎可以肯定是写新行,我想没有办法避免这一点@马古的回答也是这样。至少这可以在后台运行