Пакетный скрипт Windows: для цикла, не печатающего * значения - PullRequest
2 голосов
/ 26 января 2012

У меня есть строка командного сценария, как показано ниже:

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 Ответ

4 голосов
/ 26 января 2012

Если вы используете 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%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...