【发布时间】:2020-07-13 15:47:17
【问题描述】:
我已经为我和其他一些人构建了一些 FFmpeg powershell 脚本以供使用,并且我正在尝试使设置和更新过程尽可能简单。最终目标是能够运行 1 个安装 Chocolatey、FFmpeg、git、克隆 github 存储库(用于更新)并编辑 Windows 注册表以将实际 FFmpeg powershell 脚本/控制台程序添加到 Windows 资源管理器上下文菜单的批处理文件.这样,我只需将包含所有内容的文件夹传递给他们一次,每当我更改或向项目添加某些内容时,我可以告诉他们再次运行批处理文件,并且所有内容都是最新的。
但是,我正在努力寻找一种方法来安装 Chocolatey,然后使用 Chocolatey 进行 git,然后在执行单个 .bat 文件的情况下运行 git 命令。从我在安装 Chocolatey 后的情况来看,我需要完全重新启动 shell,然后才能安装 git,然后我必须再次重新启动 shell,然后才能使用 git 命令。截至目前,大多数实际处理都是通过从 .bat 文件启动的 Powershell 脚本进行的,并且随着每一步的执行,我都会更新一个 txt 文件,尝试重新启动批处理脚本,然后读取 txt 文件以获取我离开的地方:
@echo off
echo Administrative permissions required. Detecting permissions...
echo.
net session >nul 2>&1
if %errorLevel% == 0 (
echo Success: Administrative permissions confirmed.
echo.
) else (
echo Failure: Current permissions inadequate.
PAUSE
exit
)
set relativePath=%~dp0
set relativePath=%relativePath:~0,-1%
PowerShell -NoProfile -ExecutionPolicy Bypass -File "%relativePath%\Setup\CheckRequiredPackages.ps1" -relativePath "%relativePath%"
set /p step=<"%relativePath%\Setup\Step.txt"
if %step% == 1 (
(echo 2) > "%relativePath%\Setup\Step.txt"
PowerShell -NoProfile -ExecutionPolicy Bypass -File "%relativePath%\Setup\GetChocolatey.ps1"
start "" "%relativePath%\RunMe.bat"
exit
)
if %step% == 2 (
(echo 3) > "%relativePath%\Setup\Step.txt"
PowerShell -NoProfile -ExecutionPolicy Bypass -File "%relativePath%\Setup\GetRequiredPackages.ps1"
start "" "%relativePath%\RunMe.bat"
exit
)
if %step% == 3 (
(echo 0) > "%relativePath%\Setup\Step.txt"
PowerShell -NoProfile -ExecutionPolicy Bypass -File "%relativePath%\Setup\Update.ps1" -relativePath "%relativePath%"
)
PAUSE
Exit
问题是在批处理脚本中使用start 命令似乎不起作用,我猜是因为这个新进程是从处理 Chocolatey 安装的同一个进程中产生的,它不算实际重新启动贝壳。有什么方法可以真正重新启动 shell 并以某种方式在无需用户干预的情况下启动批处理文件?
【问题讨论】:
-
补充几点:比较数字时最好使用
EQU而不是==(参见help if)。变量relativePath命名错误,因为%~dp0返回一个绝对 路径。
标签: powershell batch-file github ffmpeg chocolatey