在sphinx的powershell中运行make.bat

问题描述 投票:0回答:1

我可以在 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 吗?

windows powershell batch-file python-sphinx
1个回答
0
投票

命令 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 命令

前两行命令行完整定义了所需的执行环境:

  1. 命令回显模式已关闭。
  2. 命令扩展已启用。
  3. 延迟变量扩展已禁用。

由于这两个命令行,批处理文件的执行不依赖于批处理文件之外的命令处理器配置。请阅读此答案,了解有关命令 SETLOCALENDLOCAL 的详细信息。

第三个命令行将当前工作目录压入

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

字符的批处理文件的 字符编码 必须使用打开命令提示符窗口并运行 endlocalchcp 时显示的 OEM

代码页
,每个字符一个字节。如果使用的文本编辑器不支持选择
mode con
代码页,则应使用
ANSI
要了解所使用的命令及其工作原理,请打开

命令提示符

窗口(开始OEM),执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。


    cmd.exe
  • ...还解释了
    call /?
    ...驱动器和参数0的完整路径,这是始终以反斜杠结尾的完整批处理文件目录路径。
  • %~dp0
  • cd /?
  • del /?
  • echo /?
  • endlocal /?
  • exit /?
  • popd /?
  • pushd /?
  • 
        
© www.soinside.com 2019 - 2024. All rights reserved.