我在一个名为' seq'的文件夹中有一个随机数字(随机名称)的.txt文件。为:
NP_4500.1.txt
NP_4568.1.txt
NP_45981.3.txt
XM_we679.txt
36498746.txt
在另一个名为' db'的文件夹中,我将数据库分成20段(由于我的计算限制),其排列如下:
hg.part-01.db
hg.part-02.db
hg.part-03.db
..
..
hg.part-20.db
现在我想在每个.txt文件中针对每个碎片数据库运行以下命令并生成碎片化结果,就像一个.txt文件(NP_4500.1.txt):
script.exe ./seq/NP_4500.1.txt -db ./db/hg.part-01.db -out NP_4500.1_part-01.out
script.exe ./seq/NP_4500.1.txt -db ./db/hg.part-02.db -out NP_4500.1_part-02.out
script.exe ./seq/NP_4500.1.txt -db ./db/hg.part-03.db -out NP_4500.1_part-03.out
...
...
script.exe ./seq/NP_4500.1.txt -db ./db/hg.part-20.db -out NP_4500.1_part-20.out
之后,我想将结果合并到一个文件中:
join NP_4500.1_part-001.out NP_4500.1_part-002.out .. NP_4500.1_part-00200.out > NP_4500.1.out
类似于下一个.txt文件:
NP_4568.1.txt
...
现在,我可以为每个.txt文件运行cmd脚本:
for %%F in ("*.txt") do script.exe ./seq/%%F .......
但我的问题是,如何将此命令与每个碎片数据库集成并合并.out文件以生成单个.txt文件的结果,然后再继续下一个。
我正在使用Windows 7(32位机器)。我可以使用cmd,perl或python脚本。谢谢你的考虑。
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\*.txt" '
) DO (
SET "join="
FOR /L %%d IN (101,1,120) DO (
SET /a segment=%%d
SET "segment=!segment:~-2!"
ECHO(script.exe %sourcedir%\%%a -db .\db\hg.part-!segment!.db -out %%~na_part-!segment!.out
SET "join=!join! %%~na_part-!segment!.out"
)
ECHO(join !join! ^>%%~na.out
)
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
请注意,在windows中,目录分隔符为\
- ' /`是一个开关指示符。
外部for
依次将每个文件名分配给%%a
。
%%d
依次分配100..120。这已分配给segment
,然后仅使用segment
的最后2个字符。
然后为每个段运行script.exe
,join
字符串构建每个.out
文件名。
最后,执行join
命令。
所需命令仅用于ECHO
以用于测试目的。 在您确认命令正确之后,删除在命令实际执行命令之前出现的字符串ECHO(
。您还需要将最终^>
中的echo
更改为>
- 插入符号>
的特殊含义是为了echo
%~na
象形文字仅表示%%a