在批处理文件中,如何获取名称中编号最大的文件?

问题描述 投票:0回答:3

我需要在命令提示符窗口批处理文件中执行此操作。我有一个批处理文件,我需要比较2个文件的文件名;例如我有whatever-5428.jarwhatever-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/

java cmd filenames
3个回答
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


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

C:\工作空间> mybatch.bat

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

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


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
© www.soinside.com 2019 - 2024. All rights reserved.