我对这个旧程序有问题。我以前有运行良好的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不相关!

10-01 14:42