Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从shell文件创建批处理文件_Java_Linux_Bash_Shell_Batch File - Fatal编程技术网

Java 从shell文件创建批处理文件

Java 从shell文件创建批处理文件,java,linux,bash,shell,batch-file,Java,Linux,Bash,Shell,Batch File,我必须将以下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]}"` &

我必须将以下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)"

我知道我必须在批处理文件中使用set Directory=“…”定义一个变量,例如,
$
是一个
commandoline参数
。。。但是我不知道如何在批处理文件中写入这一行:/

您应该将变量名DIR更改为其他名称(Win不区分大小写,DIR是一个命令)。但是,以下是等效的(查看更多详细信息):

set\u DIRNAME=%~dp0
请注意,它不会删除尾随的反斜杠(“\”)

更多:如果尾部“\”有问题,可以这样做:

set\u DIRNAME=%~dp0
集合_DIRNAME=%_DIRNAME:~0,-1%
这是一个解决办法(gainarie),但它是有效的

@EDIT0

此外,发布(上一条)注释中的代码

@EDIT1

由于该方法不可靠(例如,如果路径中的其他地方存在扩展,则也将删除该扩展),因此也会发布一个可行的替代方案,只需要一行:

script.bat:

@echo关闭
延迟扩展
集合_EXT=%~x1
集合_NAME_EXT=%~1
设置_NAME=_名称\u EXT:%\u EXT%=!
回显名称(环境变量):%\u名称%
当前位置这就成功了,而且在所有可能的方面都会更好
回显名称(bat参数):%~d1%~p1%~n1
输出

e:\Work\Dev\StackOverflow\q029928513>script.bat“e:\Work\Dev\StackOverflow\q029928513\a.bat”
名称(环境变量):e:\Work\Dev\StackOverflow\q029928513\a
名称(bat参数):e:\Work\Dev\StackOverflow\q029928513\a
e:\Work\Dev\StackOverflow\q029928513>script.bat“c:\dir\u bat\a.bat”
名称(环境变量):c:\dir\u bat\a
名称(bat参数):c:\dir\u bat\a
e:\Work\Dev\StackOverflow\q029928513>script.bat“c:\dir.bat\a.bat”
名称(环境变量):c:\dir\a
名称(bat参数):c:\dir.bat\a
e:\Work\Dev\StackOverflow\q029928513>script.bat“c:\dir.batch\a.bat”
名称(环境变量):c:\dirch\a
名称(bat参数):c:\dir.batch\a
e:\Work\Dev\StackOverflow\q029928513>script.bat“c:\dir.batch\a.bat1”
名称(环境变量):c:\dir.batch\a
名称(bat参数):c:\dir.batch\a
e:\Work\Dev\StackOverflow\q029928513>script.bat“e:\Work\Dev\StackOverflow\q029928513\a.bat”
名称(环境变量):e:\Work\Dev\StackOverflow\q029928513\a
名称(bat参数):e:\Work\Dev\StackOverflow\q029928513\a

要同时删除尾随的“\”,您可以执行以下操作:
code
set DIRNAME\=%~dp0 set DIRNAME=%DIRNAME\:~0,-1%
code
这是一种变通方法,但它很有效。谢谢!所以我需要为shell脚本中的这一行编写的所有内容?BASH_源代码[0]是什么?你能帮我处理一下BASENAME=“${1%.*}”这行吗?我已经查找了较旧的帖子和常见的shell和batch(cmd)命令…BASH_SOURCE[0]是脚本的名称(在脚本运行和源代码时工作)。下面是代码:setlocal enabledelayedexpansion set EXT=%~x1 set SELF=%~1 set BASENAME=!自我:%EXT%=!