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
Batch file 如何使管道在第二部分循环?_Batch File_For Loop_Cmd_Pipe - Fatal编程技术网

Batch file 如何使管道在第二部分循环?

Batch file 如何使管道在第二部分循环?,batch-file,for-loop,cmd,pipe,Batch File,For Loop,Cmd,Pipe,我的问题是如何做到这一点 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:\mys

我的问题是如何做到这一点

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)
此命令应将每个db转储到单独的文件中,但我得到以下错误:

"a was unexpected at this time."

你觉得怎么样?

将%pam%更改为%%a;并将命令放在循环中的新行中,管道应能完美工作

使用该测试批次作为样本

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

首先,我想说的是一个长长的命令行lol

其次,为了安全起见,请按以下方式启动for循环:

FOR /F "tokens=* USEBACKQ" %%a IN (`echo show databases; ^| mysql -ubackup -h33.33.33.33 -pmysecrethaha`)
只要养成使用USEBACKQ选项的习惯,并将命令放在反引号中。。。以防您必须在命令行参数或文件路径中使用引号,并在FOR/F命令循环中使用空格

第三,如PA所述,在for循环中使用单个字母作为临时变量(a-z或a-z区分大小写,例如%%a或%%a)


然后,无论何时调用该变量,只要按原样引用即可。例如,如果变量为%%a,则使用%%a进行调用。

确保数据库名称中不包含空格。否则,请在循环变量的出现处或其包含的表达式周围使用双引号。