如何处理batch file中%*不一致的文件名格式

我已经写了一个video转换批处理,用户可以简单地将他的video从任何磁盘或分区拖放到批处理,之后转换的video将保存在特定磁盘上的特定位置。

代码看起来像这样

@echo off %~d0 cd %~p0 for %%f in (%*) do ... pause 

实际的问题在于(%*)
当我的文件名称中有一个结束圆括号时,批处理将不起作用。 为了解决这个问题,我使用了("%*") ,但是这不适用于名称中包含空格的文件或多个文件。
我也尝试过(%~*)但这是无效的。

我注意到一些研究后,当我用名称file(test)file test删除batch file的多个文件时, %*parsing为

 file(test) "file test" 

这意味着一个文件名可能有引号,或不…

我的问题是:我如何处理这个?
理想情况下,我希望%*parsing为"file(test)" "file test" (两个名字用引号括起来)

而不是使用for循环,您可以每次调用一个参数的子程序。

 :nextArgument set arg=%~1 if not defined arg goto :eof call :processFile "%arg%" shift goto nextArgument :processFile set file=%~1 echo "%file%" :: do your processing here goto :eof 

这将一次处理每个由空格分隔的参数(但引用的参数可以包含空格),并将它们传递给processFile例程。 我使用%~1先从参数中删除引号,然后在调用processFile时加入引号。 这样,我知道什么时候我得到processFile,一切都有引号围绕它。