Цикл команды через Powershell - PullRequest
0 голосов
/ 21 июня 2019

Мне недавно пришлось перейти с пользовательского интерфейса Linux на Windows, чтобы выполнить некоторые анализы для моей научной работы.

Я запускаю программу под названием Blast в Linux и использую ее для запуска нескольких файлов одновременно.

Команда, которую я использую в Linux, такова:

для f в * .log; do blastn -query $ f -db dbname -out $ f.out -outfmt 6 -значение 0,000001 и готово

После чего программа примет все файлы с * .log, запустит команду, затем создаст выходные файлы с именем * .out

Однако у меня 0 идей о том, как преобразовать это в команду Powershell.

В настоящее время я запускаю его один за другим, но у меня есть сотни файлов.

Это базовая команда в Powershell.

blastn.exe -query. \ Filename_log -db .. \ dbname -out filename.out -outfmt 6 -значение 0.00001

Я обдумываю следующее, но оно не работает, потому что я до сих пор горю не уверен, как заставить его что-то делать. = ____ = * * тысячу двадцать-один

Get-ChildItem "C: \ pathway \ Genomes \" -Filter * .log | Foreach-Object { $ content = Get-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') }

Если создание такой команды невозможно, возможно ли создать сценарий для этого?

1 Ответ

0 голосов
/ 21 июня 2019

Попробуйте это:

$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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...