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

时间:2018-04-14 12:22:24

标签: regex windows batch-file

我有一个文本文件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数据结构转换为.mat已知的MATLAB结构。此命令执行的输出报告存储为.infoRECORDS行相同的目录。

我已将批处理文件(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,我只需要文件夹名称即可将这些文件移动到。

如何拆分这些字符串以便在每次循环迭代中提取文件夹名称?

1 个答案:

答案 0 :(得分: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)