cmd查看程序是否安装

How to check if programm installed with cmd

@echo off 
color 06
title created by AAIE
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
choco install youtube-dl
set /p input="Enter Link For Playlist:" 
set /p index="Enter Index For videos Seprated by ',':"
mkdir playlist_videos
cd playlist_videos
youtube-dl --playlist-items %index% %input%

如何检查windows中是否安装了choco或youtube_dl或者主要问题是什么条件我需要检查它是否为真然后如果没有安装则直接使用命令它将安装它们 并使用相同的命令

以下是使用 where 根据结果定位和执行操作的一些示例:

@echo off
(where choco.exe)>nul 2>&1
if errorlevel 1 (
    echo Choco not installed. Installing now..
    @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
)

choco install youtube-dl
set /p input="Enter Link For Playlist:" 
set /p index="Enter Index For videos Seprated by ',':"
mkdir playlist_videos
cd playlist_videos
youtube-dl --playlist-items %index% %input%

或使用条件运算符:

@echo off
(where choco.exe)>nul 2>&1 && goto :installed || goto :install
:install
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

:installed
choco install youtube-dl
set /p input="Enter Link For Playlist:" 
set /p index="Enter Index For videos Seprated by ',':"
mkdir playlist_videos
cd playlist_videos
youtube-dl --playlist-items %index% %input%

请注意,这些都是直接的示例,没有内置的错误处理,例如 coco 安装失败时发生的情况等。

根据你在 2>&1 >nul

上的问题

stdout(重定向时显示为 1>)是命令的输出流,其中 stderr(重定向时显示为 2>。)

当执行 >nul> file.txt 时,我们有效地将命令的输出重定向到 nul(在控制台上看不到)或文件(用于记录目的),但不是所有内容默认转到 stdout 流。所以我们需要将 stderr 流重定向到 stdout,然后将 stdout 重定向到 nul 或一个文件。

显然您也可以独立重定向。

commandname 1>out.log 2>error.log