首页 > 解决方案 > 通过 Powershell 循环命令

问题描述

我最近不得不从 Linux UI 更改为 Windows,以便为我的科学工作运行一些分析。

我在 Linux 上运行一个名为 Blast 的程序,我用它一次运行多个文件。

我在 Linux 上使用的命令是这样的:

对于 *.log 中的 f;做 blastn -query $f -db dbname -out $f.out -outfmt 6 -evalue 0.000001 &done

之后,程序将获取所有带有 *.log 的文件,运行命令,然后创建名为 *.out 的输出文件

但是,我对如何将其转换为 Powershell 命令一无所知。

我目前正在一一运行它,但我有数百个文件。

这是 Powershell 中的基本命令。

blastn.exe -query .\filename_log -db ..\dbname -out filename.out -outfmt 6 -evalue 0.00001

我正在考虑以下内容,但它不起作用,因为我仍然不确定如何让它做某事。=____=

Get-ChildItem "C:\pathway\Genomes\" -Filter *.log | Foreach 对象 { $content = 获取内容 $_.FullName

$content | Where-Object {$_ -do blastn.exe -query .\filename_log -db ..\dbname -out filename.out -outfmt 6 -evalue 0.00001'} | Set-Content ($_.BaseName + '.out') }

如果无法创建这样的命令,是否可以为此创建脚本?

标签: powershell

解决方案


尝试这个 :

$FileList = Get-ChildItem "C:\\pathway\\Genomes\\"  -Filter "*.log" # GETTING THE LIST OF .LOG FILES

$FileList | %{ # FOR EACH LOOP ON ALL .LOG FILE

    blastn.exe -query .\filename_log -db ..\dbname -out filename.out -outfmt 6 -evalue 0.00001 | Set-Content $_.BaseName.out
    # YOUR COMMAND | SET-CONTENT FILENAME # TO SAVE COMMAND OUTPUT IN FILE
    # $_ IS FOR LOOP VARIABLE AND BASENAME IS FILENAME WITHOUT EXTENSION
}

推荐阅读