如何使用Windows批处理文件拆分文本文件元素?

3

我有一个文本文件RECORDS,其中包含从physionet网站获取一系列记录文件的地址列表:

Person_01/rec_1
Person_01/rec_2
.
.
.
Person_90/rec_1
Person_90/rec_2

我需要对以下每行文本文件执行如下命令:
wfdb2mat -r rec_1 -f 0 -t 20 > rec_1m.info

在这里,wfdb2mat 是 Windows 中用于将 .dat 数据结构转换为 MATLAB 中已知的 .mat 结构的命令。该命令执行的输出报告存储在与 RECORDS 行相同的目录中,文件名为 .info

我编写了一个批处理文件(convert.bat)如下:

@echo off
for /f %%a in (RECORDS) do (wfdb2mat -r %%~a -f 0 -t 20 > %%~am.info)

要将列在RECORDS中的所有文件转换为新格式。但不幸的是,还有两个文件命名为.mat.hea存储在与convert.batch相同的目录中,并命名为rec_Xm.matrec_Xm.hea,其中X是在RECORDS中列出的记录号。
因此,我需要在for循环中添加一个额外的命令,将那些文件移动到名为RECORDS的文件夹中的正确位置。 我的批处理文件已更改为:
@echo off
for /f %%a in (RECORDS) do (wfdb2mat -r %%~a -f 0 -t 20 > %%~am.info & move rec_*.* %%~a)

问题在于%%~a包含文件夹名称和文件名,例如Person1/rec_1,我只需要文件夹名称来移动这些文件。

我该如何分割这些字符串,以便可以在每个循环迭代中提取文件夹名称?


2
%%~nxa 应该会给你 rec_1,而 %%~dpa 应该会给你 Person1/。但是你可以使用 Tokens 1-2Delims=/,并使用 %%a 表示 Person1%%b 表示 rec_1 - Compo
@Compo,就这样了,谢谢。您能否将其发布为答案以帮助其他人找到正确的答案? - MJay
1个回答

1

根据我的评论和我对您的命令应该执行的假设

@Echo Off
For /F "Tokens=1-2 Delims=/" %%A In (RECORDS) Do (
    wfdb2mat -r %%A/%%B -f 0 -t 20 >%%A/%%Bm.info
    Move /Y %%B.* %%A)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接