我对这个旧程序有问题。我以前有运行良好的linux版本,但是出于某种原因,我需要Windows版本,但该版本永远无法运行。虽然它基于Java,但根据软件创建者的指示,似乎只有启动脚本有所不同。
起初,我有一个问题
ECHO -mode Wise2 running mode [wing|global|both]
它带来了“'全局'不是公认的内部命令或程序”。
因此,我仔细研究了一下,并将其更改为字符串|似乎运作不佳。
但是现在它根本没有开始,而在最后还有一个正在运行的%和一些输出文件之前。
我想到了
设置SHARKHOME =%〜p0
和%〜dp0到位,但是没有运气。
我将类路径硬编码部分中的斜杠的方向(\更改为/,因为这就是回显%sharkhome%所给我的含义,最后是斜杠c:/ user /
我再也没有运气了,但是试图抑制%sharkhome%和硬编码目录之间的斜线(因此%sharkhome%java而不是%sharkhome%/ java或%sharkhome%\ java),但是再也没有运气了。
我坚持这一点。请为什么这不起作用?
@ECHO OFF
REM #############################
REM SHARKhunt execution script #
REM Windows version 28/2/06 #
REM #############################
SETLOCAL
REM get SHARKHOME from path of batch file
SET SHARKHOME=%~p0
REM # set classpath
SET CLASSPATH=%SHARKHOME%\java\sharkhunt1.0_win32.jar:%SHARKHOME%\java\jdom.jar:%SHARKHOME%\java\jakarta-regexp-1.2.jar
REM ############################################
REM # default directories
SET TMP=%CD%
SET PROFILES="%SHARKHOME%\priam_06_win32"
SET VER="priam_06"
SET BLASTHOME="%SHARKHOME%\blast"
SET WISEHOME="%SHARKHOME%\wise2"
SET OUTPUT=%CD%
REM # default options
SET EUK=true
SET BLASTCUT=1.0
SET LEEWAY=2000
SET MAXREGIONS=5
SET MODE=both
SET FINALCUT=0.1
SET XMX=2048M
REM ############################################
REM # check user options
IF NOT DEFINED %2 GOTO HELP
IF %1 == "-h" GOTO HELP
IF %1 == "--help" GOTO HELP
IF %1 == "-help" GOTO HELP
:LOOP
IF %1 == "-euk" (
SET EUK="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "-blastcut" (
SET BLASTCUT="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "-leeway" (
SET LEEWAY="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "-maxregions" (
SET MAXREGIONS="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "-mode" (
SET MODE="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "-finalcut" (
SET FINALCUT="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "-out" (
SET OUTPUT="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "-tmp" (
SET TMP="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "--profiles" (
SET PROFILES="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "--blasthome"
SET BLASTHOME="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "--wisehome" (
SET WISEHOME="%2"
SHIFT
SHIFT
GOTO LOOP
)
IF %1 == "--Xmx" (
SET XMX="%2"
SHIFT
SHIFT
GOTO LOOP
)
SET DATA=%1
SET GENOME=%2
IF %EUK% == "f" SET EUK=false
IF %EUK% == "F" SET EUK=false
IF %EUK% == "FALSE" SET EUK=false
IF %EUK% == "t" SET EUK=true
IF %EUK% == "T" SET EUK=true
IF %EUK% == "TRUE" SET EUK=true
SET BLASTMAT="%BLASTHOME%\data"
REM # run SharkHunt
START java -Xmx$XMX -cp %CLASSPATH% -Dshark.tempdir=%TMP% -Dshark.eukaryote=%EUK% -Dshark.genomepath=%DATA% -Dshark.profiles=%PROFILES% -Dshark.blasthome=%BLASTHOME% -Dshark.wisehome=%WISEHOME% -Dshark.output=%OUTPUT% -Dshark.maxregions=%MAXREGIONS% -Dshark.wisemode=%MODE% -Dshark.cutoff=%BLASTCUT% -Dshark.maxsig=%FINALCUT% -Dshark.leeway=%LEEWAY% -Dshark.wisemode=%MODE% -Dshark.profiles_version=%VER% sharkhunt.SharkHunt %GENOME%
PAUSE
ENDLOCAL
EXIT
:HELP
ECHO usage: $progname [options] genome_path genome_id
ECHO
ECHO options:
ECHO -euk Eukaryotic genome [T/F]
ECHO " (default=%EUK%)"
ECHO -leeway No. of bases to extract each side of BLAST hit [integer]
ECHO " (default=%LEEWAY%)"
ECHO -blastcut Cutoff E-value for initial BLAST search [real]
ECHO " (default=%BLASTCUT%)"
ECHO -maxregions No. of best BLAST regions to take forward to Wise2 search [integer]
ECHO " (default=%MAXREGIONS%)"
ECHO -mode Wise2 running mode [String]
ECHO " (default=%MODE%)"
ECHO -finalcut Final E-value cutoff [real]
ECHO " (default=%FINALCUT%)"
ECHO -tmp Directory for working files [string]
ECHO " (default=%TMP%)"
ECHO -out Output directory [string]
ECHO " (default=%OUTPUT%)"
ECHO
ECHO advanced options:
ECHO --profiles Specify profile directory [String]
ECHO " (default=%PROFILES%)"
ECHO --blasthome Specify BLAST directory [String]
ECHO " (default=%BLASTHOME%)"
ECHO --wisehome Specify Wise2 directory [String]
ECHO " (default=%WISEHOME%)"
ECHO --Xmx Specify JVM size [String]
ECHO " (default=%XMX%)"
最佳答案
只有一些备注和提示:
Escape all cmd
poisonous characters使用^
一般转义字符:ECHO [wing^|global^|both]
或"
双引号如下:SET "PROFILES=%SHARKHOME%\priam_06_win32"
echo "%PROFILES%"
(化妆品)echo(
显示空行而不是ECHO is off
消息
使用SET "BLASTMAT=%BLASTHOME%\data"
然后使用-Dshark.blasthome="%BLASTHOME%"
而不是SET BLASTMAT="%BLASTHOME%\data"
然后使用-Dshark.blasthome=%BLASTHOME%
(注意并考虑双引号位置)
检查是否向当前脚本提供了参数
宁可使用IF "%~2"=="" GOTO HELP
代替IF NOT DEFINED %2 GOTO HELP
,因为最后一种表示法可能导致测试变量%GOTO%
存在:if not defined GOTO help
,请参见if /?
根据Command Line arguments (Parameters)和IF
command更改某些测试,例如IF /I "%~1" == "-h" GOTO HELP
一个代码片段示例:
IF /I "%~1" == "-help" GOTO HELP
:LOOP
IF /I "%~1" == "-euk" (
SET "EUK=%~2"
SHIFT
SHIFT
GOTO LOOP
)
另一个代码片段示例(请注意,操作
start
command仅出于调试目的由echo
显示;保留debugecho˙直到进行调试;还请注意,""
中的start "" something
并非错误):SET "DATA=%~1"
SET "GENOME=%~2"
SET "EUK=true"
IF /I "%EUK%" == "f" SET EUK=false
IF /I "%EUK%" == "FALSE" SET EUK=false
SET "BLASTMAT=%BLASTHOME%\data"
REM # run SharkHunt
echo START "" java -Xmx %XMX% -cp %CLASSPATH% -Dshark.tempdir="%TMP%" -Dshark.eukaryote=%EUK% -Dshark.genomepath=%DATA% -Dshark.profiles=%PROFILES% -Dshark.blasthome=%BLASTHOME% -Dshark.wisehome=%WISEHOME% -Dshark.output=%OUTPUT% -Dshark.maxregions=%MAXREGIONS% -Dshark.wisemode=%MODE% -Dshark.cutoff=%BLASTCUT% -Dshark.maxsig=%FINALCUT% -Dshark.leeway=%LEEWAY% -Dshark.wisemode=%MODE% -Dshark.profiles_version=%VER% sharkhunt.SharkHunt %GENOME%
PAUSE
最后,请注意,我的答案仅与批处理脚本实践有关,与Java不相关!