windows - 批处理文件中需要绝对路径?
问题描述
我有一个调用 python 解释器的 Windows 批处理文件:
python -m ...
这样可行。但现在我有第二个批处理文件调用第一个批处理文件。当我运行这个批处理文件时,我得到一个错误:
'python' 不是内部或外部命令、可运行程序或批处理文件。
我不明白为什么第二个批处理文件不起作用。
如果有一个具体的例子有帮助,这里有一个:
在helloworld.py
print("Hello, world!")
在batch1.cmd
@echo off
echo About to call python...
python -m helloworld
pause
exit
在batch2.cmd
@echo off
set "path=%~dp0batch1.cmd"
start "" %path%
输出:
即将调用python
'python' 不是内部或外部命令、可运行程序或批处理文件。
按任意键继续 。. .
解决方案
您%path%
通过在批处理中设置它来完全破坏系统变量。现在您的系统再也找不到python
了。
只需将第二批更改为:
@echo off
set "mypath=%~dp0batch1.cmd"
start "" %mypath%
更好地解释%path%
变量。它保存到任何可能的文件位置的路径,以搜索要执行或打开的文件,而无需用户每次指定完整路径。通过像 python 一样运行命令cmd
,它首先检查批处理开始的当前目录,如果没有 python.exe,它将搜索%path%
变量中每个分号分隔的路径。当您设置一个新%path%
变量时,它只知道新设置的路径并且找不到要执行的 python,并且您会在 windows 上遇到最常见的 cmdline 错误。
另一方面,如果你想在同一个窗口中启动 batch1,也许考虑call
ing batch 而不是start
ing 它
call "%mypath%"
推荐阅读
- vue.js - VueJs 路由器不渲染组件
- jquery - jQuery addClass 屏幕方向
- git - git pull 与 git pull --rebase
- ckeditor4.x - 为什么无法激活 SCAYT 功能
- java - 使用 SpEL 自动装配值:按类型引用 bean
- matlab - 向具有特定均值的图像添加泊松噪声。
- c# - GStreamer-Sharp - msg.type 抛出异常
- javascript - 将数据从孩子传递给父母,而无需加载事件,这可能在 vue 世界上吗?
- jenkins - 让 Jenkins 管道在 Gitlab ui 中显示为 gitlab 原生管道
- .net - 如何将 ListView ItemTemplate 中的内容向右对齐?