Java 批量扩展通配符

Java 批量扩展通配符,java,windows,batch-file,Java,Windows,Batch File,我已经为linux和windows编写了一个Java程序。 要启动该程序,我在linux中使用以下代码: abc.sh: #!/bin/bash java -jar /opt/AudiobookConverter/AudiobookConverter.jar "$@" “$@”将扩展我可能抛出的任何通配符。 所以,如果我想让我的程序处理某个目录中的所有.mp3文件,我只需调用abc.sh*.mp3,它就发挥了神奇的作用 在Windows下,我有以下代码,应该也是这样做的: abc.bat: 但

我已经为linux和windows编写了一个Java程序。 要启动该程序,我在linux中使用以下代码:

abc.sh:

#!/bin/bash
java -jar /opt/AudiobookConverter/AudiobookConverter.jar "$@"
“$@”将扩展我可能抛出的任何通配符。 所以,如果我想让我的程序处理某个目录中的所有.mp3文件,我只需调用abc.sh*.mp3,它就发挥了神奇的作用

在Windows下,我有以下代码,应该也是这样做的: abc.bat:

但是当我调用abc.bat*.mp3时,它会将*.mp3传递给java程序,而不是以.mp3结尾的文件列表

我做错了什么,如何修复

您好, 阿哈94

setlocal
命令打开一个调用了
delayed expansion
的本地环境。
dir
命令列出文件(仅名称-无目录名称),
for
将整个列表行分配给
%%a
,并使用
delayed expansion
语法将每个名称附加到环境变量
files
,以访问运行时值


一旦建立了
文件
变量,可以使用常规语法将其传递给
java
命令。

where abc.sh file?提出疑问批量没有魔法,你需要一个批量魔术师;-)我必须将
“files=!files!%%a”
更改为
“files=!files!”%%a“
,并且我必须删除上一个
“%files%”
中的引号,以便带空格的名称在引号中,但是:就像一个符咒!非常感谢你!最初的解决方案将创建输出
“var1 var2 var3”
,Java将其解释为1字符串而不是3字符串,但我需要
“var1”“var2”“var3”…
,以便Java将变量识别为单个字符串,并将变量中的空格识别为变量的一部分。因此,这个修改并不十分确定Java的世界观。那么一切都解决了!
java -jar C:\AudiobookConverter\AudiobookConverter.jar "%*"
@echo off
setlocal enabledelayedexpansion
set "files="
for /f "delims=" %%a in ('dir /b /a-d "%*" ') do set "files=!files! %%a"
java -jar C:\AudiobookConverter\AudiobookConverter.jar "%files%"