代码之家  ›  专栏  ›  技术社区  ›  Ostati

在批处理文件中使用开关

  •  0
  • Ostati  · 技术社区  · 14 年前

    我有一个批处理文件,我需要像这样调用它“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 回复  |  直到 14 年前
        1
  •  4
  •   paxdiablo    14 年前

    我不完全确定我看到了你的问题。 %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
    )
    

    然后使用 rflag fspec .

    在批处理中执行与位置无关的参数解析不是一件容易的工作。我们有一个子系统来完成它,但不幸的是,它是专有的。我 告诉你,它跑过80多条线,并不是世界上最快的野兽。

    我的建议是对论点格式施加严格的要求,而不是沿着立场独立的道路走下去。你会省去很多麻烦的:-)

        2
  •  0
  •   Kurt Pfeifle    14 年前

    为什么不能简单地调用批处理文件 mybatch.bat c:\mydir ,然后评估 %1 完成了吗?

        3
  •  0
  •   Kurt Pfeifle    14 年前

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