初始脚本(正确)
@cd %~dp0
@cd kafka_2.12-2.2.0/bin/windows
@cmd /C kafka-server-start.bat ../../config/server.properties
@cd ../../../
@pause
改进后脚本(错误)
@cd %~dp0
@cd kafka_2.12-2.2.0
@cmd /C bin/windows/kafka-server-start.bat config/server.properties
@cd ..
@pause
错误提示
'bin' 不是内部或外部命令,也不是可运行的程序
或批处理文件。”
再次改进脚本(正确)
@cd %~dp0
@cd kafka_2.12-2.2.0
@cmd /C "^"bin/windows/kafka-server-start.bat^"" config/server.properties
@cd ..
@pause
另一种改进脚本(正确)
@cd %~dp0
@cd kafka_2.12-2.2.0
@cmd /C "bin\windows\kafka-server-start.bat" config/server.properties
@cd ..
@pause
问题分析
- \和/的差别。windows下的文件分隔符为“\”, “/”不能被window批处理识别。所以命令带路径时写作“bin\windows\kafka-server-start.bat”时正确,而写作
bin/windows/kafka-server-start.bat
时错误。 - 使用半角双引号将路径包裹起来后,路径中可以使用“/”。所以写作
"bin/windows/kafka-server-start.bat"
时正确。 - 使用cmd命令执行命令时,需要将半角双引号转义后(转义字符:^)传递给cmd命令。写作
cmd /C "^"bin/windows/kafka-server-start.bat^""
时正确