我有一个批处理文件,我需要像“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,并且一切正常,但我想通过参数读取。这可能吗?
干杯!
答案 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
)
然后使用rflag
和fspec
。
批量执行与位置无关的真正参数解析并非易事。我们有一个子系统,但不幸的是,它是专有的。我会告诉你它跑过大约80多行并且不是世界上最快的野兽。
我的建议是对参数格式施加严格的要求,而不是沿着与位置无关的路径。你会省去很多麻烦: - )
答案 1 :(得分:0)
为什么不能简单地将您的批处理文件称为mybatch.bat c:\mydir
,然后只评估%1
,并完成?
答案 2 :(得分:0)
如果批处理文件的唯一目的是将文件名写入输出,那么你不能简单地使用dir /b /s
吗?