Batch script to enter the file name and add it to the beginning of each line

advertisements

I'm trying to grab the file name from a .LOG file and append it to the beginning of each line in the file, sans extension, with a space between the file name and the line contents. There are many such files in a folder and the script should be performed for each .LOG file in the folder. An example file name looks like this:

20160201.log

I want to add the file name to each of the lines in the file which look like this:

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

To give a result of this:

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

I saw this question here but it references pulling a filename from a list of filenames and placing at the beginning of each entry respectively, so that doesn't work for me. I also looked at this question, but since I need to use the file name instead of my current system time that won't work either. I don't have any code to offer...I couldn't use anything conclusive from the questions I found and I'm totally new to batch scripts.


EDIT 1: Magoo's code

Here is the current code I'm trying to run using Magoo's answer (Note the comments are my addition for troubleshooting):

@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

As shown in the code, I get a complaint from windows saying that it can't find the file path...even though that's the one I copied from the folder properties.


EDIT 2:

Since I didn't hear back on my edit 1 I went with Arescet's answer. I sadly don't seem to have any way around the slowness of the script. My final code is the same as what he provided in his answer.


@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

This takes all .log files in "C:\PATH TO WHEREVER\", renames them, and writes the filename and data line by line into the original name, then deletes the file when done. @Magoo's answer clearly tops mine, but a different solution should help you understand different ways to solve future desires.