【发布时间】: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在执行命令行之前将重定向运算符<替换为0<,并将>替换为1>。这是无法避免的,而且是绝对正确的。由于这个原因,重定向运算符<和>应该永远不会用0<或1>写入批处理文件或Windows 命令行以重定向STDIN 或STDOUT 应用程序或命令的句柄。 -
我建议您也阅读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