Windows批处理脚本:用于循环不打印*值
我有一个批处理脚本行,如下所示:Windows批处理脚本:用于循环不打印*值,windows,batch-file,Windows,Batch File,我有一个批处理脚本行,如下所示: for %%v in (aa bb* cc) do echo mget %%v 我得到的输出是: mget aa mget cc mget aa mget bb* mget cc 但我需要输出为: mget aa mget cc mget aa mget bb* mget cc 更新 我有一个名为ftp.bat的批处理文件和一个名为parm.txt的参数文件parm.txt看起来像: server=xxx.yyy.com user=ab
for %%v in (aa bb* cc) do echo mget %%v
我得到的输出是:
mget aa
mget cc
mget aa
mget bb*
mget cc
但我需要输出为:
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,但我需要分离文件。如果您使用带有通配符的
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
,为服务器
、用户
、pwd
和文件
,然后在文件列表上调用vary.bat
(如上所述)
for /F "delims== tokens=1,2" %%I in (parm.txt) do set %%I=%%J
vary %files%
如果将
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
,为服务器
、用户
、pwd
和文件
,然后在文件列表上调用vary.bat
(如上所述)
for /F "delims== tokens=1,2" %%I in (parm.txt) do set %%I=%%J
vary %files%
谢谢但我还是有问题。是的,正如你所说,我有一个单独的文件。但该文件有变量(值)和值列表,如values=aa bb*cc。在这种情况下,它只回显第一个值,即aa。每个列表中的值是固定数量的,还是不同?值的数量不同,它是动态的。实际上不需要单独的文件。您可以使用子例程调用。@user1171858:确保在
:vary
行之前添加goto:eof
,以便在主脚本完成工作时跳过子例程,避免子例程不必要的额外“调用”。谢谢。但我还是有问题。是的,正如你所说,我有一个单独的文件。但该文件有变量(值)和值列表,如values=aa bb*cc。在这种情况下,它只回显第一个值,即aa。每个列表中的值是固定数量的,还是不同?值的数量不同,它是动态的。实际上不需要单独的文件。您可以使用子例程调用。@user1171858:确保在:vary
行之前添加goto:eof
,以便在主脚本完成工作时跳过子例程,以避免子例程不必要的额外“调用”。