我有一个如下所示的批处理脚本行:
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 概念,我有服务器、用户、密码,但我需要分隔文件。
最佳答案
如果您将 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
,为每个 server
、user
、pwd
和files
,然后在文件列表上调用 vary.bat
(如上所述)。
for /F "delims== tokens=1,2" %%I in (parm.txt) do set %%I=%%J
vary %files%
关于Windows批处理脚本: for loop not printing * values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9022788/