首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带星号的Batch FOR循环

带星号的Batch FOR循环
EN

Stack Overflow用户
提问于 2012-11-29 00:26:41
回答 3查看 1.9K关注 0票数 3

我有这个单行CMD文件TEST.CMD:

代码语言:javascript
运行
复制
for %%f in (%1 %2 %3 %4 %5 %6 %7 %8) DO ECHO %%f

如果我运行以下命令:

代码语言:javascript
运行
复制
TEST this is a test

它在单独的行上正确地回显每个参数,即,

代码语言:javascript
运行
复制
this
is
a
test

但是,如果参数包含星号,则会跳过该参数。例如,

代码语言:javascript
运行
复制
TEST this is a* test

结果如下:

代码语言:javascript
运行
复制
this
is
test

如何获取带有星号的参数,将其视为普通令牌?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2012-11-29 14:30:24

适用于大多数参数的最简单方法是将参数传递给变量的“数组”,然后使用for /L遍历该数组。这最好通过延迟扩展来实现。

这项技术可以处理任意数量的参数-它不限于9个。

代码语言:javascript
运行
复制
@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!
票数 1
EN

Stack Overflow用户

发布于 2012-11-29 00:46:43

我发现的唯一一种事先不知道参数的方法是在for循环中回显参数

代码语言:javascript
运行
复制
for /f %%f in ('"echo %1 && echo %2 && echo %3 && etc"') DO ECHO %%f
票数 0
EN

Stack Overflow用户

发布于 2012-11-29 01:23:24

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

看看如果使用下面的代码会发生什么:

代码语言:javascript
运行
复制
@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打印当前目录中的所有文件)

然后你需要做的是..。:

代码语言:javascript
运行
复制
@Echo OFF

Call :sub a b c* d e

:sub
FOR /F "tokens=*" %%a in ('Echo %*') DO (ECHO %%a)
Pause&Exit
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13609760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档