powershell - Powershell替换:用#
问题描述
我正在尝试将带有脚本的视频下载到预定义的目录中:
$save_dir = 'video'
$list_dir = "-o N:/$save_dir/%(upload_date)s_%(title)s_%(id)s.%(ext)s"
ForEach ($item in $list_dir) {
Write-Host $item
& yt-dlp $item `
--cache-dir "$PSScriptRoot/bin/cache" `
$(Get-Clipboard)
}
$list_dir
作为单个元素数组是必要的(较大脚本的一部分),因此是 ForEach 循环。终端输出(请注意,您需要先将视频 URL 复制到剪贴板):
-o N:/video/%(upload_date)s_%(title)s_%(id)s.%(ext)s
[youtube] YbJOTdZBX1g: Downloading webpage
[info] YbJOTdZBX1g: Downloading 1 format(s): 248+251
[download] Destination: N#\video\20181206_YouTube Rewind 2018 - Everyone Controls Rewind _ #YouTubeRewind_YbJOTdZBX1g.f248.webm
这最终会N#
在终端运行的目录中创建一个名为的目录。为什么它:
在驱动器号之后替换为#
?它清楚地知道它是:
基于Write-Host
输出的。
解决方案
为什么它
:
在驱动器号之后替换为#
?
执行此替换的不是 PowerShell;通过消除过程,它必须是yt-dlb
"-o N:/$save_dir/%(upload_date)s_%(title)s_%(id)s.%(ext)s"
您不能同时将选项及其参数作为单个字符串传递 - PowerShell 会将其作为单个双引号参数(由于至少存在一个空格而被双引号括起来)传递。
通过变量传递的等价物& yt-dlp -o N:/$save_dir/%(upload_date)s_%(title)s_%(id)s.%(ext)s
是使用数组变量,选项名称及其参数作为单独的元素传递:
$arr = '-o', "N:/$save_dir/%(upload_date)s_%(title)s_%(id)s.%(ext)s"
& yt-dlp $arr --cache-dir $PSScriptRoot/bin/cache (Get-Clipboard)
注意:为简洁起见,以上使用单个数组。要定义单个数组中托管的多个数组,您可以轻松定义一个交错数组(其元素也是数组的数组);使用仅包含一个,
嵌套数组(选项+参数)对的交错数组的示例,通过数组构造函数运算符的一元形式构造:
$list_dir = , ('-o', "N:/$save_dir/%(upload_date)s_%(title)s_%(id)s.%(ext)s")
ForEach ($item in $list_dir) {
& yt-dlp $item --cache-dir $PSScriptRoot/bin/cache (Get-Clipboard)
}
对于多元素交错数组,放置,
在子数组
( $list_dir = ('-o', 'foo'), ('-o', 'bar')
) 之间。
推荐阅读
- python - Why are the file names coming with an extra single quote at the beginning?
- html - Preventing two position absolute elements from colliding
- python - pythonic way of parsing a string into a dictionary with dict comprehension
- ios - Fullscreen modal makes navigationBar.barStyle not working properly
- python - AttributeError:模块“seaborn”没有属性“load_dataset”
- visual-studio - 删除选项卡面板 - Visual Studio 2019
- git - 我可以同时在 Visual Studio Code 中连接我的 GitLab 和 Github 帐户吗?
- firebase - 从 Firebase 管理员为用户订阅 Firebase 云消息传递主题会导致主题参数的语法无效
- querydsl - 在querydsl的orderBy子句中使用列名
- linux - 使用 linux/unix 脚本在 HTML 的特定单词之后获取多个单词