Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows批处理脚本:用于循环不打印*值_Windows_Batch File - Fatal编程技术网

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
,以便在主脚本完成工作时跳过子例程,以避免子例程不必要的额外“调用”。