0

我需要在命令提示符窗口批处理文件中执行此操作。我有一个批处理文件,我需要比较两个文件的文件名;例如,我有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,我只是从批处理文件中启动它,也许有一些方法可以使用某些方法来检查具有最高编号的文件,然后使用以下命令行启动该文件:java -jar -Xmx2G -XX:MaxPermSize=256m MYFILENAMEWITHTHEHIGHESTNUMBERATTHEEND.jar

在此处查看我的批处理文件:http ://www.fileswap.com/dl/XyvIN2VpgF/

4

3 回答 3

2

我会使用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

于 2013-04-24T17:08:45.840 回答
0

在 Windows 批处理文件中使用 DOS 进行字符串匹配和正则表达式是一个非常丑陋的 hack。这就像试图用电锯敲钉子一样。你可以做到,但你应该这样做吗?不。

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
  1. 创建一个名为 C:\workspace 的目录。
  2. 创建一个名为 mybat.bat 的文件并将上面的代码放入其中。
  3. 将两个文件放在 C:\workspace 中1234.txt,并调用abcd.txt
  4. 运行上面的bat文件。
  5. 输出如下:

C:\工作区>mybatch.bat

在“1234.txt”中找到一个数字

DOSFindStr命令只返回编号为 0 到 9 的文件/文件夹。它省略了abcd.txt并包括了1234.txt. 您可以增加正则表达式的复杂性以仅解析数字,然后将它们转换为整数,然后返回具有最大数字的那个。

于 2013-04-24T17:36:35.897 回答
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
于 2015-09-14T01:02:29.453 回答