想知道如何接受批处理文件命令行参数,如下所示,并将它们存储在变量中 -
file.bat /* */ # /* /* */ #
我尝试了这个,我得到了带有斜杠的文件名。我单独尝试了哈希(#)并且它工作得很好,但没有斜杠。我可以以某种方式逃脱它们吗?
回复以下答案 - 这是不起作用的部分 -
SETLOCAL ENABLEDELAYEDEXPANSION
set count=1
FOR %%i in (%*) do (
set var!count!=%%i
set /a count=!count!+1
)
以下答案解决了这个问题。
答案 0 :(得分:1)
好的,我通过查看previous question中已删除的帖子找出了问题。在您删除的回复中(应该是您的问题的评论或编辑),您说:
谢谢你们,它很棒,虽然我只看到了一些我没有看过的东西 期望。看起来我在命令的某些部分有n和1,2和3 我不想改变的那一行。我需要命令行参数3到26 只是这样改变了所以我会继续努力。
另一个注意事项是我去了这个方法,因为我尝试了 / *,* /和#直接在命令行和返回变量I中 从我的电脑得到一些文件名。我想是的 反斜杠以某种方式被解释为文件名。
有没有办法在命令行中直接使用/ *,* /和# 把它们作为变量正确引入?如果不是,我会留在我的 编号方法。
在该问题中查看您的代码,我发现您正在尝试通过FOR循环迭代参数。只要没有任何参数包含*
或?
,那就非常有效。不幸的是,没有办法逃脱这些角色以获得你想要的结果。
我所知道的唯一好方法是使用带SHIFT的GOTO循环来迭代你的参数。
@echo off
setlocal
set n=0
:parseArgs
set /a n+=1
(set arg%n%=%1)
if defined arg%n% (
shift /1
goto :parseArgs
)
::display the parsed arguments
set arg