批处理FOR循环中的星号

3

I have this single line CMD file TEST.CMD:

for %%f in (%1 %2 %3 %4 %5 %6 %7 %8) DO ECHO %%f

如果我运行以下代码:
TEST this is a test

它可以正确地将每个参数分别打印在一行上,即

this
is
a
test

然而,如果参数包含星号,则会跳过它。例如:
TEST this is a* test

结果为:

this
is
test

如何使带星号的参数被视为普通标记?

谢谢。

3个回答

1
最简单的方法是将参数传递到一个“变量数组”中,然后使用FOR /L循环遍历该数组。这可以通过延迟扩展来实现。
这种技术可以处理任意数量的参数 - 不仅限于9个。
@echo off
setlocal

:: Transfer parameters to an "array"
set arg.cnt=1
:getArgs
(set arg.%arg.cnt%=%1)
if defined arg.%arg.cnt% (
  set /a arg.cnt+=1
  shift /1
  goto :getArgs
)
set /a arg.cnt-=1

:: Process the "array"
setlocal enableDelayedExpansion
for /l %%N in (1 1 %arg.cnt%) do echo arg %%N = !arg.%%N!

0

我发现在不知道参数的情况下唯一的方法是在 for 循环中回显参数。

for /f %%f in ('"echo %1 && echo %2 && echo %3 && etc"') DO ECHO %%f

0

你不能打印那个,星号是一种在某些命令中匹配“1个或多个字符”的动态运算符,比如FOR命令,唯一的方法是使用/F参数来获取命令的输出。

看看如果你使用这个会发生什么:

@Echo OFF

Pushd "C:\"

Call :sub a b c * d e

:sub
for %%f in (%1 %2 %3 %4 %5 %6 %7 %8) DO ECHO %%f
Pause&Exit

(FOR打印当前目录中的所有文件)

然后你需要做...:

@Echo OFF

Call :sub a b c* d e

:sub
FOR /F "tokens=*" %%a in ('Echo %*') DO (ECHO %%a)
Pause&Exit

这会将所有参数打印在同一行而不是按要求分开打印。 - Ofir Luzon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接