2015-04-28 103 views
1

我有以下shell文件轉換成一個批處理文件:創建一個批處理文件出shell文件

\#!/bin/bash 
\# 
\# Generates and compiles a lexer or parser and runs it (this means 
\# that the lexer/parser must contain a main method) 
\# 
\# Example usage: antlr4-run.sh Lexer.g4 

DIR="$(cd `dirname "${BASH_SOURCE[0]}"` && pwd)" 
ANTLR_JAR=$DIR/lib/antlr-4.2.2-complete.jar 
BASENAME="${1%.*}" 
OUTDIR=out 

echo "Generating..." 
java -jar $ANTLR_JAR $1 -o $OUTDIR || exit 1 

echo "Compiling..." 
(cd $OUTDIR; javac -cp .:$ANTLR_JAR ${BASENAME}*.java) || exit 1 

\#\# run (try parser first, then lexer, then plain) 
echo "Input (end with ^D):" 

if [[ -a $OUTDIR/${BASENAME}Parser.class ]] ; then 
     (cd $OUTDIR; java -cp .:$ANTLR_JAR ${BASENAME}Parser) || exit 1 
elif [[ -a $OUTDIR/${BASENAME}Lexer.class ]] ; then 
     (cd $OUTDIR; java -cp .:$ANTLR_JAR ${BASENAME}Lexer) || exit 1 
elif [[ -a $OUTDIR/${BASENAME}.class ]] ; then 
     (cd $OUTDIR; java -cp .:$ANTLR_JAR ${BASENAME}) || exit 1 
fi 

exit 1 

能否請你幫我舉一個例子以下行?

DIR="$(cd `dirname "${BASH_SOURCE[0]}"` && pwd)" 

我知道我有與集目錄中的批處理文件來定義一個變量=「...」例如,並且$commandoline parameter ......但我不知道該怎麼寫在批處理文件中:/

回答

1

您應該將變量名稱DIR更改爲其他值(Windows不區分大小寫,並且dir是一個命令)。但是,這裏是等效的:

set DIRNAME=%~dp0 

請注意,它不會刪除尾隨的「\」。

更多:如果結尾的「\」是一個問題,這是可以做到的:

set _DIRNAME=%~dp0 
set DIRNAME=%_DIRNAME:~0,-1% 

這是一個解決辦法(gainarie),但它的工作原理。

+0

還去除尾隨 「\」,這裏是你可以做什麼: 'code' 集DIRNAME _ =%〜DP0 集DIRNAME =%DIRNAME_:〜0,-1% 'code' 這是一個解決方法(增益),但它的作品。 – CristiFati

+0

謝謝!所以我需要在shell腳本中編寫這行代碼?關於BASH_SOURCE [0]怎麼樣?你能幫我解決BASENAME =「$ {1%。*}」的問題嗎?我已經在尋找舊帖子以及常見的shell和批處理(cmd)命令.... –

+0

BASH_SOURCE [0]是腳本的名稱(在腳本運行**和**源時運行)。 – CristiFati