cmd脚本中没有输出来合并批处理文件内容

时间:2016-10-17 12:52:41

标签: cmd merge

在windows cmd中,我正在运行一个exe命令,如:

for %F in ("*.fa") do  "../program.exe" -input %F -output %F.fasta| type %F %F.fasta > %F.txt

这里,在当前文件夹中,有三个输入文件:

x.fa
y.fa
z.fa

x.fa的文件内容为:

hi

自动生成的x.fasta的文件内容为:

all

我想要的是生成一个包含以下内容的最终.txt文件(此处为x.txt):

hi
all

但是虽然我收到.fasta文件(filecontent - > all),但在最终的.txt文件中,我只获得了.fa文件的内容(filecontent - > hi)

我的剧本出了什么问题?

2 个答案:

答案 0 :(得分:1)

代码中的%F始终扩展为完整文件名:x.fay.faz.fa

因此%F.fasta将扩展为x.fa.fastay.fa.fastaz.fa.fasta

%F.txt将扩展为x.fa.txt,依此类推。

要获取不带扩展名的文件名,您应使用%~dpnF,例如%~dpnF.txt%~dpnF.fasta

此外,您应该使用copy命令来连接文件:

copy %F + %~dpnF.fasta %dpnF.txt

完整的脚本如下所示:

for %F in ("*.fa") do  "../program.exe" -input %F -output %~dpnF.fasta| copy %F + %~dpnF.fasta %dpnF.txt

您可以在https://technet.microsoft.com/en-us/library/cc754900.aspx#Anchor_2找到for命令变量扩展的完整说明

PS:请注意脚本文件(.cmd或.bat)中的变量名称必须先于%%而不是%

答案 1 :(得分:1)

当您使用|时,您正在创建管道,并且管道两侧的命令同时执行,左侧管道中的命令的标准输出流进入右侧命令的标准输入流。

因此,您在type结束之前开始执行program.exe,因此尚未生成.fasta文件且type无法读取其内容。

只需将命令与&连接起来,即可在type结束后执行program.exe

                                                               v
for %F in (*.fa) do  ..\program.exe -input %F -output %F.fasta & type %F %F.fasta > %F.txt
                                                               ^