我正在尝试从.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的回答。我遗憾地似乎没有办法解决剧本的缓慢问题。我的最终代码与他在答案中提供的代码相同。
答案 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
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
...解码
从指定目录中取出与“* .log”匹配的文件,将其名称分配给%%f
在目标目录中创建一个新文件%%~nf
。out。阅读%%f
至%%a
和echo
该行的每一行,前缀为%%~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的答案显然是我的最佳选择,但另一种解决方案可以帮助您了解解决未来愿望的不同方法。