как сделать трубу для цикла во втором разделе? - PullRequest
2 голосов
/ 20 июня 2011

Мой вопрос: как заставить это работать?

FOR /F %pam IN ('echo show databases; ^| mysql -ubackup -h33.33.33.33 -pmysecrethaha') DO (mysqldump --add-drop-database -C --lock-all-tables -pmysecrethaha -ubackup -h33.33.33.33 %pam% | C:\Program0x20Files\7-Zip\7z.exe a -si -bd G:\mysql\redmine\%today%\%pam%.7z)

Эта команда должна сделать дамп каждой БД в отдельных файлах, но я получаю эту ошибку:

"a was unexpected at this time."

что ты думаешь?

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

Прежде всего, я хотел бы сказать, что это одна длинная строка команды lol.

Во-вторых, для безопасной меры запустите цикл FOR как:

FOR /F "tokens=* USEBACKQ" %%a IN (`echo show databases; ^| mysql -ubackup -h33.33.33.33 -pmysecrethaha`)

Просто сделайтепривычка использовать опцию USEBACKQ и помещать вашу команду в кавычки ... на тот случай, если вам когда-нибудь придется использовать кавычки в аргументе командной строки или путях к файлам с пробелами внутри этого цикла команд FOR / F.

В-третьих, как указывалось в PA, используйте отдельные буквы для вашей временной переменной в цикле FOR (az или AZ с учетом регистра, например, %% a OR %% A)

Затем каждый раз, когда вы вызываете эту переменную, вы простоссылаться на него как есть, например, если переменная %% a, вы вызываете ее с %% a.

1 голос
/ 20 июня 2011

Изменить% pam% на %% a;и поместите команду внутри цикла в новой строке, труба должна работать идеально.

Используйте эту тестовую партию как образец

FOR /F "tokens=*" %%a IN ('dir /b /od *.txt') DO (
  type %%a | more
)
...