我需要在命令提示符窗口批处理文件中执行此操作。我有一个批处理文件,我需要比较2个文件的文件名;例如我有whatever-5428.jar
和whatever-9001.jar
以及可能更多whatever*.jar
个文件。
我需要为我的批处理文件创建一个脚本,以便它使用编号最大的jar。 (9001高于5428)。这让我更难,因为我不能做java -jar -Xmx2G -XX:MaxPermSize=256m whatever*.jar
,因为java不喜欢通配符。
我需要将它与上面的java脚本一起使用,因为我正在使用一定量的RAM和Perm Size启动它。
在批处理文件中,如何获取编号最大的jar文件?我不确定如何使用java,我只是从批处理文件启动它,也许可能有某种方法使用某些东西来检查具有最高编号的文件然后使用此命令行启动该文件:{{ 1}}
请在此处查看我的批处理文件:http://www.fileswap.com/dl/XyvIN2VpgF/
答案 0 :(得分:1)
我会使用Java Regex来解析两个文件之间要比较的数字。正则表达式非常灵活,能够处理通配符
编辑: 请参阅以下示例并输出:
public static void main(String[] args) throws Exception
{
System.out.println(getTrailingNumber("whatever-5428.jar"));
System.out.println(getTrailingNumber("whatever-9001.jar"));
}
public static String getTrailingNumber(String filename)
{
Pattern pattern = Pattern.compile("-(\\d+)\\.");
Matcher matcher = pattern.matcher(filename);
matcher.find();
return matcher.group(1);
}
输出继电器:
5428
9001
答案 1 :(得分:0)
在Windows批处理文件中使用DOS进行字符串匹配和正则表达式是一个非常难看的黑客。这就像试图用电锯敲打钉子一样。你可以做,但是你呢?否。
dos命令findstr
可以执行有限数量的匹配和正则表达式,如下例所示:
@Echo Off
CD "C:\workspace"
Dir /B>Dir.temp
FindStr /R "[0-9]" "Dir.temp">FindStr.temp
Del Dir.temp
For /F "tokens=*" %%a In (FindStr.temp) Do Call :WorkIt "%%a"
Del FindStr.temp
Exit /B
:WorkIt
:: Insert code here. Use %1 to get the file name with quotes. For example:
Echo Found a number in %1
Exit /B
1234.txt
和abcd.txt
C:\工作区> mybatch.bat
在“1234.txt”中找到一个数字
DOS FindStr
命令仅返回其中包含数字0到9的文件/文件夹。它省略了abcd.txt
并包含了1234.txt
。您可以增加正则表达式的复杂性以仅解析数字,然后将它们转换为整数,然后返回具有最大数字的数字。
答案 2 :(得分:0)
for /f %%a in ('dir /b ^|sort /r ^|findstr /r [0-9]') do (
set "filename=%%a"
goto done
)
:done
echo the highest found is %filename%
exit /b 0