批处理脚本以获取文件名并添加到每行的开头

时间:2016-03-11 18:51:31

标签: windows batch-file

我正在尝试从.LOG文件中获取文件名,并将其附加到文件中每行的开头,无扩展名,文件名和行内容之间有一个空格。文件夹中有许多此类文件,应该为该文件夹中的每个.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: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

我看到了这个问题here,但它引用了从文件名列表中提取文件名并分别放在每个条目的开头,这对我来说不起作用。我也查看了this question,但由于我需要使用文件名而不是当前的系统时间,这也不起作用。我没有提供任何代码......我无法从我发现的问题中使用任何结论,而且我对批处理脚本完全不熟悉。

编辑1:Magoo的代码

以下是我正在尝试使用Magoo的答案运行的当前代码(注意评论是我的故障排除的补充):

@ECHO Off
SETLOCAL
SET "sourcedir=C:\Users\ckemmann\Desktop\Current"
SET "destdir=C:\Users\ckemmann\Desktop\Current\New"

::echo %sourcedir% <I check what I've assigned to sourcedir.
::echo %destdir% <And to destdir.
::pause

FOR %%f IN ("%sourcedir%\*.log") DO >"%destdir%\%%~nf.out" (
 FOR /f "usebackqdelims=" %%a IN ("%%f") DO (
  ECHO %%~nf   %%a
 )
)

::pause <I catch the batch script telling me that the system cannot find the path specified.

GOTO :EOF

如代码中所示,我收到来自Windows的投诉,说它无法找到文件路径...即使这是我从文件夹属性中复制的那个。

编辑2:

由于我没有收到我的编辑内容1,我接受了Arescet的回答。我遗憾地似乎没有办法解决剧本的缓慢问题。我的最终代码与他在答案中提供的代码相同。

2 个答案:

答案 0 :(得分:2)

@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
SET "destdir=U:\destdir"
FOR %%f IN ("%sourcedir%\*.log") DO >"%destdir%\%%~nf.out" (
 FOR /f "usebackqdelims=" %%a IN ("%%f") DO (
  ECHO %%~nf   %%a
 )
)

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

...解码

从指定目录中取出与“* .log”匹配的文件,将其名称分配给%%f

在目标目录中创建一个新文件%%~nf。out。阅读%%f%%aecho该行的每一行,前缀为%%~nf和几个空格。

%%~nf表示仅%%f的名称部分。

重定向器>创建一个新文件,并在其放置的位置,接受echo的输出到该文件而不是正常的echo-to-console。

答案 1 :(得分:1)

@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

这将获取.log中的所有"C:\PATH TO WHEREVER\"个文件,重命名它们,并逐行将文件名和数据写入原始名称,然后在完成后删除文件。 @Magoo的答案显然是我的最佳选择,但另一种解决方案可以帮助您了解解决未来愿望的不同方法。