Batch file 使用部分匹配的文件名合并数据

Batch file 使用部分匹配的文件名合并数据,batch-file,merge,match,Batch File,Merge,Match,我有许多文件名部分匹配的数据文件,例如 T70M1U1-cell.txt T70M1U1-anode.txt T80M5U1-cell.txt T80M5U1-anode.txt ... “T70M1U1 cell.txt”包含 及 “T70M1U1阳极.txt”包含 我想将两个数据集合并为一个“T70M1U1.txt”,其中包含: A 1 B 2 C 3 如何使用批处理或软件将两个数据集“T70M1U1-cell.txt&T70M1U1 anode.txt”和其他类似数

我有许多文件名部分匹配的数据文件,例如

T70M1U1-cell.txt
T70M1U1-anode.txt
T80M5U1-cell.txt
T80M5U1-anode.txt
...
“T70M1U1 cell.txt”包含

及 “T70M1U1阳极.txt”包含

我想将两个数据集合并为一个“T70M1U1.txt”,其中包含:

A    1
B    2
C    3 
如何使用批处理或软件将两个数据集“T70M1U1-cell.txt&T70M1U1 anode.txt”和其他类似数据集进行批处理合并?

@ECHO OFF
@ECHO OFF
SETLOCAL
SET source=c:\sourcedir
SET dest=c:\destdir
FOR /f "delims=-" %%a IN (
 'dir /b/a-d "%source%\*-cell.txt"'
 ) DO IF EXIST "%source%\%%a-anode.txt"  (
 FOR /f "tokens=1*delims=:" %%p IN ('findstr /n /r "$" ^<"%source%\%%a-cell.txt"') DO (
   FOR /f "tokens=1*delims=:" %%s IN ('findstr /n /r "$" ^<"%source%\%%a-anode.txt"') DO (
   IF %%p==%%s >>"%dest%\%%a.txt" ECHO %%q %%t
   )
  )
 )
SETLOCAL 设置source=c:\sourcedir 设置dest=c:\destdir 对于/f“delims=-”%%a,在( 'dir/b/a-d“%source%\*-cell.txt”' )是否存在“%source%\%%a-anode.txt”( 对于/f“tokens=1*delims=:”%%p IN('findstr/n/r“$”^
@ECHO OFF
SETLOCAL
设置source=c:\sourcedir
设置dest=c:\destdir
对于/f“delims=-”%%a,在(
'dir/b/a-d“%source%\*-cell.txt”'
)是否存在“%source%\%%a-anode.txt”(
对于/f“tokens=1*delims=:”%%p IN('findstr/n/r“$)^
在最后一行中,这应该是
echo%1
!arr[%2]!
之间的一个选项卡,但是您可以使用您认为合适的任何分隔符


在最后一行中,这应该是
echo%1
!arr[%2]之间的选项卡!
,但您可以使用任何您认为合适的分隔符。

T70M1U1部分的长度总是7个字符,还是可能会有所不同?是的,总是7个字符是T70M1U1部分的长度总是7个字符,还是可能会有所不同?是的,总是7个字符感谢您的答案。但是,在我不知道之后,它就不起作用了dify目录,你能检查一下吗?因为我不熟悉批处理。我会拿出水晶球…迷雾正在消散…精灵们说最好确切地说你选择了什么目录,或者邪恶的黑屏如何反应,甚至是你说的“工作不好”是什么意思.他们最好的猜测是使用引号-试试看set source=“yoursourcedir”
对于
source
和它的孪生兄弟
dest
,因为危险的编辑器在批处理行中添加尾随空格,使得
cmd.exe
genie的路径不可理解……很抱歉我的描述不清楚。我试图在
source
dest
中添加引号t source=“d:\source”
黑屏上什么也不显示,“d:\dest”中也没有txt文件。当我在第8行添加
echo%%p
FOR/f时,tokens=1*delims=:“%%p in('findstr/n/r“$”^尝试更改第7行`)如果存在“%source%\%%a-anode.txt”(`to`
)则执行echo%%a&如果存在“%source%\%%a-anode a.txt”(echo%%a-anode exists
,它应该显示检测到的*-单元文件以及是否存在对应的-anode。我建议
delims
子句中的
-
可能缺失,使
%%a
成为完整文件名。或者
a-d
中的
-
缺失,这将导致
dir
到atempt到list(不存在)目录,而不是不区分目录。更改第7行时,屏幕显示
T70M1U1 T70M1U1阳极存在
。“dest”中也没有文件。问题似乎出现在第8行。感谢您的回答。但是,在我修改目录后,它无法正常工作,请检查它,因为我不熟悉批处理。我会把水晶球拿出来……迷雾正在消散……精灵们说,最好确切地说出你选择了什么目录,或者邪恶的黑屏是如何反应的,甚至是你所说的“工作不好”。他们最好的猜测是调用引号的咒语-试试
set source=“yoursourcedir”
对于
source
和它的孪生兄弟
dest
,因为危险的编辑器在批处理行中添加尾随空格,使得
cmd.exe
genie的路径不可理解……很抱歉我的描述不清楚。我试图在
source
dest
中添加引号t source=“d:\source”黑屏上什么也不显示,“d:\dest”中也没有txt文件。当我在第8行添加
echo%%p
FOR/f时,tokens=1*delims=:“%%p in('findstr/n/r“$”^尝试更改第7行`)如果存在“%source%\%%a-anode.txt”(`to`
)则执行echo%%a&如果存在“%source%\%%a-anode a.txt”(echo%%a-anode exists
,它应该显示检测到的*-单元文件以及是否存在对应的-anode。我建议
delims
子句中的
-
可能缺失,使
%%a
成为完整文件名。或者
a-d
中的
-
缺失,这将导致
dir
到a尝试列出(不存在)目录,而不是不区分目录。更改第7行,屏幕显示
T70M1U1 T70M1U1阳极存在
。此外,“dest”中没有文件。问题似乎出在第8行。
A    1
B    2
C    3 
@ECHO OFF
SETLOCAL
SET source=c:\sourcedir
SET dest=c:\destdir
FOR /f "delims=-" %%a IN (
 'dir /b/a-d "%source%\*-cell.txt"'
 ) DO IF EXIST "%source%\%%a-anode.txt"  (
 FOR /f "tokens=1*delims=:" %%p IN ('findstr /n /r "$" ^<"%source%\%%a-cell.txt"') DO (
   FOR /f "tokens=1*delims=:" %%s IN ('findstr /n /r "$" ^<"%source%\%%a-anode.txt"') DO (
   IF %%p==%%s >>"%dest%\%%a.txt" ECHO %%q %%t
   )
  )
 )
@echo off
setlocal enabledelayedexpansion

cd "dir\containing\txtfiles"

for %%I in (*-cell.txt) do (
    set arr.length=0
    set file=%%~nxI
    set dest=!file:-cell.txt=.txt!
    if exist "!dest!" del "!dest!"
    for /f "usebackq" %%a in ("!file:cell.txt=anode.txt!") do (
        set "arr[!arr.length!]=%%a"
        set /a "arr.length+=1"
    )
    set idx=0
    for /f "usebackq" %%a in ("%%I") do (
        >>"!dest!" call :dump %%a !idx!
        set /a "idx+=1"
    )
)
goto :EOF

:dump
echo %1 !arr[%2]!