SQLCMD命令在CMD中运行,但不作为BAT



在命令提示符下,即使没有管理员访问权限,我也可以运行:

sqlcmd -S .SQLEXPRESS01 –E -Q "EXEC sp_BackupDatabases @backupLocation='C:SQLBackupsfull', @backupType='F'"

它运行没有问题,但是当我尝试通过批处理文件运行它时,出现以下错误:

Sqlcmd: 'ûE': Unexpected argument. Enter '-?' for help.

我已经创建了脚本,在有和没有管理员权限的情况下运行它,并且已经进行了大约 3 个小时的谷歌搜索,但无法找到有效的解决方案。 我已经尝试了各种部分周围带引号和不带引号的各种排列,但什么都不需要。

我正在尝试让它作为自动脚本运行,所以我需要确保我可以告诉 Windows 运行它并且它会通过。

您用于创建批处理文件的任何工具都会更改其中一个连字符:

sqlcmd -S .SQLEXPRESS01 –E -Q "EXEC sp_BackupDatabases @backupLocation='C:SQLBackupsfull', @backupType='F'"

如果您在十六进制编辑器中转储此行:

00000000  65 63 68 6F 20 73 71 6C 63 6D 64 20 2D 53 20 2E  echo sqlcmd -S .
00000010  5C 53 51 4C 45 58 50 52 45 53 53 30 31 20 96 45  SQLEXPRESS01 .E
00000020  20 2D 51 20 22 45 58 45 43 20 73 70 5F 42 61 63   -Q "EXEC sp_Bac
00000030  6B 75 70 44 61 74 61 62 61 73 65 73 20 40 62 61  kupDatabases @ba
00000040  63 6B 75 70 4C 6F 63 61 74 69 6F 6E 3D 27 43 3A  ckupLocation='C:
00000050  5C 53 51 4C 42 61 63 6B 75 70 73 5C 66 75 6C 6C  SQLBackupsfull
00000060  5C 27 2C 20 40 62 61 63 6B 75 70 54 79 70 65 3D  ', @backupType=
00000070  27 46 27 22 0D 0A                                'F'"..

您会注意到紧随其后的字符SQLEXPRESS01不是普通连字符,而是字符0x96。 将其更改为普通连字符,您的脚本应该可以工作。