0

我有一个批处理文件,我需要像这样调用它“mybatch.bat -rc:\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 并且一切正常,但我想通过参数读取。这可能吗?

干杯!

4

3 回答 3

4

我不完全确定我看到了你的问题。%1在这种情况下很明显-r,您应该使用%2which is 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
)

然后使用rflagand fspec

批量进行真正与位置无关的参数解析并非易事。我们有一个子系统可以做到这一点,但不幸的是,它是专有的。我告诉你它跨越了大约 80 多条线,并不是世界上最快的野兽。

我的建议是对参数格式提出严格的要求,而不是走与位置无关的道路。你会为自己省去很多麻烦:-)

于 2010-08-06T22:14:05.460 回答
0

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

于 2010-08-07T17:11:39.987 回答
0

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

于 2010-08-07T17:16:16.423 回答