在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)
我的剧本出了什么问题?
答案 0 :(得分:1)
代码中的%F
始终扩展为完整文件名:x.fa
,y.fa
或z.fa
因此%F.fasta
将扩展为x.fa.fasta
,y.fa.fasta
,z.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
^