Windows批处理脚本:for循环不打印*值

时间:2012-01-26 17:48:52

标签: windows batch-file

我有一个如下所示的批处理脚本行:

for %%v in (aa bb* cc) do echo mget %%v

我的输出为:

mget aa

mget cc

但我需要输出:

mget aa 

mget bb*

mget cc

更新

我有一个名为ftp.bat的批处理文件和一个名为parm.txt的参数文件。 parm.txt看起来像:

server=xxx.yyy.com
user=abc
pwd=xyz
files=aa bb* cc dd ------(this varies)

我需要在批处理文件中提取这些值以构造ftp命令。使用delim概念我有服务器,用户,pwd,但我需要分开文件。

1 个答案:

答案 0 :(得分:4)

如果将for与通配符一起使用,解释程序将查找与通配符匹配的所有文件(在本例中为“bb *”),并将文件名传递给您的命令。它不会将包含'*'(或'?')的字符串传递给您的命令。

而是创建一个名为filelist.txt的文本文件,其中包含:

aa
bb*
cc

并使用命令:

for /F %%I in (filelist.txt) do echo mget %%I

<强>更新

显然,每行都有一个filelist.txt个项目。创建名为vary.bat的批处理文件:

@echo off
:more
if "%1"=="" (goto finished)
echo mget %1
shift
goto more
:finished

这需要可变数量的参数,并为每个参数回显一个mget。用以下内容称呼它:

for /F "tokens=*" %%I in (filelist.txt) do vary %%I

另一次更新

这将显示parm.txt,为serveruserpwdfiles中的每一个创建变量,然后调用vary.bat(如上所述)文件列表。

for /F "delims== tokens=1,2" %%I in (parm.txt) do set %%I=%%J
vary %files%