gpt4 book ai didi

java - 从 shell 文件创建批处理文件

转载 作者:太空狗 更新时间:2023-10-29 12:14:40 25 4
gpt4 key购买 nike

我必须将以下 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 parameter.. .但我不知道如何在批处理文件中写入这一行:/

最佳答案

您应该将变量名 DIR 更改为其他名称(Win 不区分大小写,dir 是命令)。但是,这是等效的(查看 [MS.Docs]: Batch parameters 了解更多详细信息):

set _DIRNAME=%~dp0

请注意,它不会删除结尾的反斜杠(“\”)。

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

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

这是一种解决方法 (gainarie),但它确实有效。

@EDIT0:

此外,发布(最后)评论中的代码。

@EDIT1:

由于该方法不可靠(例如,如果扩展名出现在路径的其他地方,它也会被删除),还发布了一个可行的替代方法,只需要一行:

script.bat:

@echo off
setlocal enabledelayedexpansion

set _EXT=%~x1
set _NAME_EXT=%~1
set _NAME=!_NAME_EXT:%_EXT%=!

echo Name (env vars): %_NAME%

:: This does the trick, and it's waaay better in every possible way
echo Name (bat args): %~d1%~p1%~n1

输出:

e:\Work\Dev\StackOverflow\q029928513>script.bat "e:\Work\Dev\StackOverflow\q029928513\a.bat"
Name (env vars): e:\Work\Dev\StackOverflow\q029928513\a
Name (bat args): e:\Work\Dev\StackOverflow\q029928513\a

e:\Work\Dev\StackOverflow\q029928513>script.bat "c:\dir_bat\a.bat"
Name (env vars): c:\dir_bat\a
Name (bat args): c:\dir_bat\a

e:\Work\Dev\StackOverflow\q029928513>script.bat "c:\dir.bat\a.bat"
Name (env vars): c:\dir\a
Name (bat args): c:\dir.bat\a

e:\Work\Dev\StackOverflow\q029928513>script.bat "c:\dir.batch\a.bat"
Name (env vars): c:\dirch\a
Name (bat args): c:\dir.batch\a

e:\Work\Dev\StackOverflow\q029928513>script.bat "c:\dir.batch\a.bat1"
Name (env vars): c:\dir.batch\a
Name (bat args): c:\dir.batch\a

e:\Work\Dev\StackOverflow\q029928513>script.bat "e:\Work\Dev\StackOverflow\q029928513\ a.bat"
Name (env vars): e:\Work\Dev\StackOverflow\q029928513\ a
Name (bat args): e:\Work\Dev\StackOverflow\q029928513\ a

关于java - 从 shell 文件创建批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29928513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com