【发布时间】:2014-12-18 01:31:03
【问题描述】:
非常感谢就以下问题提供的任何帮助。我有一个带有 5 个命令行参数的 Windows 批处理脚本,我需要在脚本中执行计数以确保输入了 5 个参数。该脚本的调用如下所述。第一个、第二个或第三个参数都可以用通配符提及。我用的是第一个。
returnlist.bat "sh*" "" "" "domainroot" "C:\tmp\outfile.txt"
我使用以下代码块来评估计数器
set /A argC=0
for %%x in (%*) do Set /A argC+=1
echo %argC%
在这种情况下,返回的计数是 4 而不是 5,并且脚本失败,因为预期有 5 个参数。但是,如果我们不在命令行参数中使用 *,那么我们会返回正确的计数 5。
因此我将代码更改为
Set /A argC=0
Set argStr=%*
:SplitParams
if "!argStr!" NEQ "" (
for /F "tokens=1* delims= " %%i in ("!argStr!") do (
Set myArr[!argC!]=%%i
Set /A argC+=1
Set argStr=%%j
goto :SplitParams
)
)
这会处理通配符并在包含 * 时返回计数 5。 但是,如果任何命令行参数中有空格
例如。 returnlist.bat "test sh*" "" "" "domainroot" "C:\tmp\outfile.txt"
然后第一个参数被视为 2 个参数,因此返回的计数是 6 而不是 5,这再次导致脚本失败,因为预期只有 5 个参数。
非常感谢在此问题上提供的任何帮助。我需要能够指定通配符,并且参数中也可以存在空格。
【问题讨论】:
标签: batch-file for-loop wildcard