我遇到了一个奇怪的问题,我确信这个问题很容易解释和解决。
我正在使用.bat文件来安装很多程序,其中一个是SQL Server 2012(如果重要的话,其他安装只是.net框架,OPOS驱动程序和使用SQL服务器的POS软件)。
我可以让批处理文件以静默方式安装所有东西,包括SQL(带SSMS),这很棒。但是一旦安装了SQL Server,我就想运行几个SQL脚本来创建/附加数据库。
我知道安装有效(如果我不尝试除安装之外的任何东西),我知道SQLCMD可以工作(如果我在安装后单独运行它),但是如果我尝试运行SQLCMD在安装之后,在同一个批处理文件中,它失败并且标准'SQLCMD不被识别为内部或外部命令......'
我已经把它归结为我需要重新启动CMD才能让它识别新命令(即SQLCMD),所以我想我将SQLCMD命令拆分成一个单独的批处理文件并调用它,但是它仍然无法正常工作。在CMD.exe获取新命令之前,我必须关闭原始批处理文件。
那么......是否可以'刷新'cmd.exe,以便新安装的SQLCMD命令可以从原始批处理文件中使用?
这是(部分)我的脚本。 (请注意,我已经删除了SQL Server之前的所有其他安装程序)
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
"%~dp0SQLServer.exe" /QS /INDICATEPROGRESS /ACTION=install /FEATURES=SQL,SSMS /INSTANCENAME=Datasym /SECURITYMODE=SQL /SAPWD=Welcome21ST /IACCEPTSQLSERVERLICENSETERMS
echo.
echo SQL Server installed
sqlcmd -S %computername%\DATASYM -U sa -P Welcome21ST -i %script%
%script%
变量发生变化(就像我说的,我想运行多个脚本)。而且我知道脚本本身也可以工作。
为什么CMD不能将SQLCMD识别为命令?
我试图替换这一行:
sqlcmd -S %computername%\DATASYM -U sa -P Welcome21ST -i %script%
与
call sqlscript.bat
因为我认为会打开另一个CMD,exe(它会这样),所以我假设第二个CMD会看到ew命令(SQLCMD),但它似乎没有。
有关如何让SQLCMD在原始批处理文件中工作的任何帮助将不胜感激。
答案 0 :(得分:1)
正如您已经发现的那样,当前的CMD窗口不会获取对系统PATH环境变量的新更改。如果由于某种原因你不想把完整的路径放到sqlcmd
(我认为这是最好的解决方案),你可能会尝试这样做。
start /wait cmd /c sqlcmd -S %computername%\DATASYM -U sa -P Welcome21ST -i %script%
这将生成一个新窗口并等待sqlcmd调用完成后再返回原始脚本。