1

想知道如何获取批处理文件命令行参数,如下所示并将它们存储在变量中 -

file.bat /* */ # /* /* */ #

我试过这个,我得到了其中有斜线的文件名。我单独尝试了哈希(#),它工作正常,但不是带有斜杠的。我能以某种方式逃脱它们吗?

回复下面的答案-这是不工作的部分-

SETLOCAL ENABLEDELAYEDEXPANSION
set count=1
FOR %%i in (%*) do (
set var!count!=%%i
set /a count=!count!+1
)

下面的答案解决了它。

4

1 回答 1

1

好的,我通过查看您上一个问题中已删除的帖子找到了您的问题。在您删除的回复(应该是对您的问题的评论或编辑)中,您说:

谢谢大家,效果很好,虽然我只是看到了一些我没想到的东西。看起来我在不想更改的命令行部分有编号 1,2 和 3。我只需要以这种方式更改命令行参数 3 到 26,所以我会处理它。

另一个注意事项是我使用这种方法是因为我尝试将 /*、*/ 和 # 直接放在命令行中,而我得到的返回变量是我计算机中的一些文件名。我猜反斜杠以某种方式被解释为文件名。

有没有办法直接在命令行中使用 /*、*/ 和 # 并将它们正确地作为变量引入?如果不是,我将继续使用我的编号方法。

查看该问题中的代码,我发现您正在尝试通过 FOR 循环迭代参数。只要没有任何参数包含*or ,它就可以很好地工作?。不幸的是,没有办法逃避这些字符以获得您想要的结果。

我知道的唯一好的解决方案是使用带有 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
于 2012-10-06T00:17:42.443 回答