我为linux和windows编写了一个Java程序。 要启动程序,我在linux中使用以下代码:
abc.sh:
java -jar C:\AudiobookConverter\AudiobookConverter.jar "%*"
“$ @”会扩展我可能会抛出的任何通配符。 所以,如果我希望我的程序处理某个目录中的所有.mp3文件,我只需调用abc.sh * .mp3就可以实现它的魔力。
在Windows下,我有以下代码,它应该做同样的事情: abc.bat:
NR===FNR
但是当我调用abc.bat * .mp3时,它会将* .mp3传递给java程序,而不是以.mp3结尾的文件列表。
我做错了什么,以及如何解决这个问题?
问候, AHahn94
答案 0 :(得分:2)
@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
命令。