Batch file Win Batch-在每行向TSV文件追加文本

Batch file Win Batch-在每行向TSV文件追加文本,batch-file,Batch File,我在一个目录中有许多TSV文件,我想在每一行附加文件名作为一个额外的列。 例如,我的数据如下所示 之前 文件名:snaper\u User\u list.txt Username group user1 admin user2 users Username group root admin sql admin 文件名:marlin_User_list.txt Username group user1 admin user2 u

我在一个目录中有许多TSV文件,我想在每一行附加文件名作为一个额外的列。 例如,我的数据如下所示

之前

文件名:snaper\u User\u list.txt

Username    group        
user1 admin  
user2 users
Username    group  
root admin  
sql admin
文件名:marlin_User_list.txt

Username    group        
user1 admin  
user2 users
Username    group  
root admin  
sql admin
我的理想状态是有一个如下所示的文本文件

之后

文件名:output.txt

user1 admin snapper  
user 2 users snapper  
root admin marlin  
sql admin marlin  
目前,我需要在MS Windows中完成此操作

我有下面的脚本工作,虽然它仍然显示在我的输出完整的文件名

Rem Rename the files by just using the name before the underscore.
for /f "tokens=1* delims=_" %%i in ( 'dir *.txt /b' ) do (
    rename %%i_%%j %%i.txt
    )

Rem Combine the files.
FOR %%I IN (*.txt) DO (
    FOR /f "tokens=*" %%a IN (%%I) DO (
        echo %%a%TAB%%%I>>combined.txt
        )
    )
这是相当丑陋的代码

谢谢。
(更新-更新我的代码)

我假设您指的是文件名中出现的下划线

@echo off
setlocal

::The following defines a TAB character that is not preserved on StackOverflow
set "TAB=   "

for %%F in (*.txt) do call :processFile "%%F"
exit /b

:processFile
set "name=%~1"
set name=%name:_=&rem %
for /f "usebackq delims=" %%a in (%1) do echo %%a%TAB%%name%>>combined.txt
神奇的命令是
set name=%name:=&rem%
。它通过在语句中注入备注命令来工作。假设当前名称为
part1\u part2.txt
。搜索和替换展开后,完整语句变为
set name=part1&rem part2.txt

编辑-改进答案

看看你编辑的问题,我意识到有更好的方法。我本应该考虑使用FOR/F:-)解析名称的,你90%都在那里

@echo off
setlocal

::The following defines a TAB character that is not preserved on StackOverflow
set "TAB=   "

for %%F in (*.txt) do (
  for /f "delims=_" %%I in ("%%F") do (
    for /f "usebackq delims=" %%a in ("%%F") do echo %%a%TAB%%%I>>combined.txt
  )
)

什么下划线?原始TSV文件中显示的第一个下划线,还是文件名中的第一个下划线?如果你给出一个前后对比的例子,这会有所帮助。