我可以在 Windows 10 上的 Powershell 中执行这些命令
.\make.bat clean
rm .\source\bundle\*.*
cd ..
sphinx-apidoc -o docs/source/bundle .\bundle\ -M
cd docs
.\make.bat html
它们在 Python 中工作,环境在 Powershell 中激活。然而,一旦将所有内容添加到批处理文件中以自动执行此操作,除了删除部分即可工作。
我尝试在 sphinx 和 make.bat 之前添加here提到的所有内容。但什么也没发生。
知道如何在 Windows Powershell 批处理/ps 文件中正确调用 sphinx 和 make.bat 吗?
命令 rm 是 Unix/Linux/Mac shell 解释器命令
ash
, bash
, dash
, ksh
, sh
, zsh
, ... PowerShell用于删除文件的 cmdlet 是 Remove-Item,用于删除文件的 Windows Command Processor 命令是 del。
make.bat
是由 Windows 命令处理器 cmd.exe
处理的批处理文件。因此,将任务的所有命令放入批处理文件并从命令提示符窗口或 PowerShell 控制台运行此批处理文件是有意义的。
批处理文件应包含以下命令行:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
pushd "%~dp0" || exit /B 1
call make.bat clean
del /A /F /Q source\bundle\*
cd ..
sphinx-apidoc -o docs\source\bundle .\bundle\ -M
cd docs
call make.bat html
popd
endlocal
此批处理文件中除
sphinx-apidoc
之外的所有命令都是 cmd.exe
的内部 Windows 命令。
前两行命令行完整定义了所需的执行环境:
由于这两个命令行,批处理文件的执行不依赖于批处理文件之外的命令处理器配置。请阅读此答案,了解有关命令 SETLOCAL 和 ENDLOCAL 的详细信息。
第三个命令行将当前工作目录压入
cmd.exe
的堆栈中,可以是任何目录,并使包含当前执行的批处理文件的目录成为当前工作目录。这应该永远不会失败,因为批处理文件当前由 cmd.exe
处理,但仍然有条件命令运算符 ||
用于执行命令 exit
,带有选项 /B
和退出代码 1
用于退出批处理文件处理 if 命令 pushd
未能使批处理文件目录成为当前工作目录。有关条件命令运算符的更详细说明,请参阅使用 Windows 批处理文件使用多个命令的单行。接下来是从该批处理文件中称为,批处理文件||
带有参数
make.bat
。必须使用命令 clean
,否则如果没有 call
,批处理文件处理将继续 call
,而不会在到达批处理文件 make.bat
处理结束时返回到此批处理文件。缺少命令 make.bat
的使用是问题中发布的批处理文件仅在执行时执行干净操作而不执行其他操作的原因。接下来使用命令call
删除子目录
del
中的所有文件,包括由于选项source\bundle
而隐藏的文件(所有属性而不是隐式默认值/A
,不包括隐藏文件)和由于选项而只读的文件/A-H
(强制删除只读文件)因为选项/F
而安静。然后当前工作目录更改为批处理文件目录的父目录。
在当前工作目录更改(返回)到子目录
/Q
之前执行
sphinx-apidoc
,其中批处理文件docs
被第二次调用,但这次带有参数make.bat
。最后使用命令html
恢复初始当前工作目录,其中绝对路径从
popd
堆栈中弹出,并使用命令cmd.exe
恢复初始执行环境。仅包含 ASCII 字符的批处理文件的 字符编码 必须使用打开命令提示符窗口并运行 endlocal
或 chcp
时显示的 OEM
代码页,每个字符一个字节。如果使用的文本编辑器不支持选择
mode con
代码页,则应使用ANSI
。要了解所使用的命令及其工作原理,请打开命令提示符窗口(开始OEM
),执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
cmd.exe
call /?
...驱动器和参数0的完整路径,这是始终以反斜杠结尾的完整批处理文件目录路径。%~dp0
cd /?
del /?
echo /?
endlocal /?
exit /?
popd /?
pushd /?