【问题标题】:Using switches inside batch file在批处理文件中使用开关
【发布时间】:2010-08-06 22:06:13
【问题描述】:

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

干杯!

【问题讨论】:

    标签: batch-file named-parameters


    【解决方案1】:

    我不完全确定我看到了您的问题。在这种情况下,%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 多条线,并不是世界上最快的野兽。

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

    【讨论】:

    • 看起来不错。也感谢您的建议!
    【解决方案2】:

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

    【讨论】:

    • 我正在编写单元测试来模拟真实命令的作用,因为我需要读取和解析输出。谢谢!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-02-26
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 2012-12-21
      • 1970-01-01
      • 2017-03-24
      相关资源
      最近更新 更多