我已经为 linux 和 windows 编写了一个 Java 程序。 要启动该程序,我在 linux 中使用以下代码:
abc.sh:
#!/bin/bash
java -jar /opt/AudiobookConverter/AudiobookConverter.jar "$@"
“$@”将扩展我可能向它抛出的任何通配符。 因此,如果我希望我的程序处理某个目录中的所有 .mp3 文件,我只需调用 abc.sh *.mp3 即可发挥它的魔力。
在 Windows 下,我有以下代码,它应该做同样的事情: abc.bat:
java -jar C:\AudiobookConverter\AudiobookConverter.jar "%*"
但是当我调用 abc.bat *.mp3 时,它会将 *.mp3 传递给 java 程序,而不是以 .mp3 结尾的文件列表。
我做错了什么,如何解决?
您好, AHahn94
最佳答案
@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
,并且每个名称使用 delayed expansion
语法附加到环境变量 files
以访问运行时值。
一旦建立了files
变量,就可以使用常规语法将其传递给java
命令。
关于java - 批量扩容通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44757766/