【问题标题】:how to make pipe in for cycle in second section?如何在第二部分为循环制作管道?
【发布时间】:2011-06-20 14:50:55
【问题描述】:

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

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."

你怎么看?

【问题讨论】:

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

标签: batch-file for-loop cmd pipe


【解决方案1】:

首先我想说的是,这是一条很长的命令,哈哈。

其次,为了安全起见,将 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 调用它。

【讨论】:

    【解决方案2】:

    将 %pam% 更改为 %%a;并将命令放在循环中的新行中,管道应该可以正常工作。

    将此测试批次用作样本

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多