首页 > 解决方案 > 批处理文件中需要绝对路径?

问题描述

我有一个调用 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' 不是内部或外部命令、可运行程序或批处理文件。

按任意键继续 。. .

标签: windowsbatch-file

解决方案


%path%通过在批处理中设置它来完全破坏系统变量。现在您的系统再也找不到python了。

只需将第二批更改为:

@echo off
set "mypath=%~dp0batch1.cmd"
start "" %mypath%

更好地解释%path%变量。它保存到任何可能的文件位置的路径,以搜索要执行或打开的文件,而无需用户每次指定完整路径。通过像 python 一样运行命令cmd,它首先检查批处理开始的当前目录,如果没有 python.exe,它将搜索%path%变量中每个分号分隔的路径。当您设置一个新%path%变量时,它只知道新设置的路径并且找不到要执行的 python,并且您会在 windows 上遇到最常见的 cmdline 错误。

另一方面,如果你想在同一个窗口中启动 batch1,也许考虑calling batch 而不是starting 它

 call "%mypath%"

推荐阅读