【问题标题】:Windows .bat file 0< not sure from where the 0 is coming fromWindows .bat 文件 0< 不确定 0 来自何处
【发布时间】:2019-04-07 08:13:17
【问题描述】:

我的 Windows .bat 文件有一个奇怪的问题,在执行时

set mysql="C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe"
set progDir="D:\BigData\14.Nodejs\3.Firebase"
set dataDir=D:\BigData\14.Nodejs\3.Firebase\data

%mysql% -ualpha -pbeta test < "%dataDir%\LatestData - Q -201811 - INSERT DMLs.sql"

我指的是问题

%mysql% -ualpha -pbeta test < "%dataDir%\LatestData - Q -201811 - INSERT DMLs.sql"

下面是输出

D:\BigData\14.Nodejs\3.Firebase>date1

D:\BigData\14.Nodejs\3.Firebase>set mysql="C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe"

D:\BigData\14.Nodejs\3.Firebase>set progDir="D:\BigData\14.Nodejs\3.Firebase"

D:\BigData\14.Nodejs\3.Firebase>set dataDir=D:\BigData\14.Nodejs\3.Firebase\data

D:\BigData\14.Nodejs\3.Firebase>"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -ualpha -pbeta test  0<"D:\BigData\14.Nodejs\3.Firebase\data\LatestData - Q -201811 - INSERT DMLs.sql"

在最后一次你可以看到一个“0

我只是想通过 Windows 批处理在多个文件中运行 DML。

【问题讨论】:

  • 请阅读微软关于Using command redirection operators的文章。 Windows 命令处理器cmd.exe 在执行命令行之前将重定向运算符&lt; 替换为0&lt;,并将&gt; 替换为1&gt;。这是无法避免的,而且是绝对正确的。由于这个原因,重定向运算符&lt;&gt; 应该永远不会用0&lt;1&gt; 写入批处理文件或Windows 命令行以重定向STDINSTDOUT 应用程序或命令的句柄。
  • 我建议您也阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line? 上的答案,它解释了set variable="value"set "variable=value" 之间的区别。

标签: mysql windows batch-file batch-processing


【解决方案1】:

0 表示标准输入。 0&lt; myfile 表示将 myfile 的内容发送到标准输入&lt; myfile0&lt; myfile 的简写。 0 没有害处,您无需摆脱它。

【讨论】:

    【解决方案2】:

    您正在查看的是命令的回声,解释器如何评估代码。

    • 句柄 0 是标准输入,&lt; 重定向被解释为来自句柄 0&lt;
    • 句柄 1 是标准输出,&gt; 重定向被解释为来自句柄 1&gt; 或句柄 &gt;&amp;1
    • 句柄 2 是 Stderr,其中 2&gt; 重定向被解释为来自句柄 2&gt; 或句柄&gt;&amp;2

    句柄 3 到 9 是批处理文件特有的辅助句柄。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 2010-09-14
      相关资源
      最近更新 更多