在批处理文件中使用开关

时间:2010-08-06 22:06:13

标签: batch-file named-parameters

我有一个批处理文件,我需要像“mybatch.bat -r c:\ mydir”一样调用它,批处理文件循环遍历目录并将文件名写入输出。我面临的问题是我无法读取参数“-r”。

这是它的样子:

@echo off
echo [%date% %time%] VERBOSE    START
for %%X in (%1\*.xml) do echo [%date% %time%] VERBOSE    systemmsg Parsing XML file '%%X'
echo [%date% %time%] VERBOSE    END

然而,我可以使用%2而不是%1,并且一切正常,但我想通过参数读取。这可能吗?

干杯!

3 个答案:

答案 0 :(得分:4)

我不完全确定我看到了你的问题。在这种情况下,%1显然是-r,而您应该使用%2 c:\mydir

如果您的意思是要确保用户首先指定-r,则可以使用以下内容:

@echo off
if not "x%1"=="x-r" (
    echo [%date% %time%] ERROR Called without -r
    goto :eof
)
echo [%date% %time%] VERBOSE    START
for %%X in (%2\*.xml) do echo [%date% %time%] VERBOSE systemmsg Parsing file '%%X'
echo [%date% %time%] VERBOSE    END

如果-r 可选,您通常可以执行以下操作:

set fspec=%1
set rflag=no
if "x%fspec"=="x-r" (
    set fspec=%2
    set rflag=yes
)

然后使用rflagfspec

批量执行与位置无关的真正参数解析并非易事。我们有一个子系统,但不幸的是,它是专有的。我告诉你它跑过大约80多行并且不是世界上最快的野兽。

我的建议是对参数格式施加严格的要求,而不是沿着与位置无关的路径。你会省去很多麻烦: - )

答案 1 :(得分:0)

为什么不能简单地将您的批处理文件称为mybatch.bat c:\mydir,然后只评估%1,并完成?

答案 2 :(得分:0)

如果批处理文件的唯一目的是将文件名写入输出,那么你不能简单地使用dir /b /s吗?