我为Linux和Windows编写了一个Java程序。
要启动程序,我在Linux中使用以下代码:
ABC SH:

#!/bin/bash
java -jar /opt/AudiobookConverter/AudiobookConverter.jar "$@"

“$@”将展开我可能向其抛出的任何通配符。
所以,如果我想让我的程序处理某个目录中的所有.mp3文件,我只要调用abc.sh*.mp3,它就会发挥它的魔力。
在windows下,我有以下代码,应该也这样做:
蝙蝠:
java -jar C:\AudiobookConverter\AudiobookConverter.jar "%*"

但是,当我调用ABC.BAT*.MP3时,它将传递*.mp3到Java程序,而不是在.mp3中结束的文件列表。
我做错了什么,怎么解决?
问候语,
AHHN949

最佳答案

@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%"

setlocal命令打开一个调用了delayed expansion的本地环境。dir命令列出文件(仅名称-没有目录名),for将整个列表行分配给%%a,每个名称都将使用files语法附加到环境变量delayed expansion中以访问运行时值。
一旦建立了files变量,就可以使用常规语法将其传递给java命令。

关于java - 批量扩展通配符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44757766/

10-14 17:23
查看更多