Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 获取文件名并添加到每行开头的批处理脚本_Windows_Batch File - Fatal编程技术网

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

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

我试图从.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: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文件相当长(每个文件几千行),批处理脚本的运行速度非常慢。我想知道是否有任何方法可以加速这个脚本。缓慢的部分几乎可以肯定是写新行,我想没有办法避免这一点@马古的回答也是这样。至少这可以在后台运行