2017-09-05 126 views
0

如何在PowerShell中转义此命令?如何逃避“<”?

mysql -uuser -ppass -hlocalhost -Ddb < .\someSqlFile.sql 

我需要逃避<

someSqlFile.sql内容:

SELECT * FROM some_table 
INTO OUTFILE 'C:/tmp/output.csv' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n'; 
+0

你可以将某些东西导入DB'<'并从DB中导出一些东西''' –

+0

@juergend我不认为你理解。它需要'''从字面上在PowerShell中,这不会发生在CMD –

+0

我无法测试它 - 但你有没有尝试反向' – Itchydon

回答

4

PowerShell不支持输入重定向(<)。或者与CMD(从PowerShell的)执行命令:

cmd /c mysql -uuser -ppass -hlocalhost -Ddb '<' .\someSqlFile.sql 

或管中的文件的内容到命令:

Get-Content .\someSqlFile.sql | & mysql -uuser -ppass -hlocalhost -Ddb 
+0

我有一个问题:而不是在MySql文件中的命令,我可以将它作为一个这里的字符串? –

+0

另外,'''在'|'之后做了什么? –

+0

是的,管道这里字符串或字符串数​​组也应该工作。 '&'是PowerShell的[call operator](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_operators?view=powershell-3.0#special-operators)。当你的命令在这种情况下是一个单词时,这不是必需的,但当你的命令是一个字符串时(例如,因为它包含空格),你必须使用它。 ''C:\ mysql.exe“路径只会回显字符串,而\'\”C:\路径\ mysql.exe“'会运行可执行文件。 –

0

使用输入重定向的替代方法是在使用source命令mysql客户端。

mysql -uuser -ppass -hlocalhost -Ddb -e "source ./someSqlFile.sql" 

我不是PS用户,所以我不能为最后一个参数提供正确的语法。它应该是一个参数,但它包含一个空格。我搜索了其他一些网站,寻找一种简洁的技术,在PS中使用包含空格的单个参数,但这并不容易。 :-)

为您解决在CSV导出一个表格式的另一个方式的问题,你可能想用mysqldump:

mysqldump -uuser -ppass -hlocalhost --tab=C:/tmp db some_table 

此输出文件some_table.sql和文件some_table.txt这是DDL和该表的数据。