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]!