Я создал скрипт PowerShell для загрузки видео с использованием youtube-dl. Когда видео успешно загружено, я хочу скопировать его .info.json
файл и добавить его в файл сценария, который я использую в качестве базы данных. youtube-dl предоставляет параметр --exec
, который позволяет запустить команду при успешной загрузке видео. Это мой сценарий:
Write-Host "Checking for updates to youtube-dl . . . "
.\youtube-dl.exe -U
Write-Host "Searching for and downloading videos . . . "
$PSDefaultParameterValues['Out-File:Encoding'] = 'UTF8'
if (![System.IO.File]::Exists('.\database.js')) {
Set-Content -Path .\database.js -Value "const database = [
]"
}
$stopWatch = [system.diagnostics.stopwatch]::startNew()
.\youtube-dl.exe --config-location config.txt --write-info-json --exec "Write-MetadataToDatabase {}" # Call the Write-MetadataToDatabase function, passing the location of the video .info.json file as {}
$elapsed = $stopWatch.Elapsed.ToString("hh\:mm\:ss")
Write-Host "Finished downloading. Took $elapsed."
Read-Host -Prompt "Done, press Enter to exit"
function Write-MetadataToDatabase {
Param($Path)
$content = [System.IO.File]::ReadAllText($Path, [System.Text.Encoding]::UTF8) | ConvertFrom-Json
$content.PSObject.Properties.Remove('formats')
$content = $content | ConvertTo-Json -compress
$stream = [IO.File]::OpenWrite('.\database.js')
$stream.SetLength($stream.Length - 4)
$stream.Close()
$stream.Dispose()
$content + ",
]" | Add-Content .\database.js -Encoding UTF8
$i++
Write-Host "Appended video metadata to database file"
}
Как запустить мою функцию, передав местоположение файла .info.json
видео, если видео успешно загружено?
Редактировать
Я выяснил, как получить местоположение файла .info.json
. Передача {} в качестве параметра для --exec
возвращает местоположение видео, которое совпадает с местоположением файлов метаданных. Я до сих пор не могу понять, как успешно вызвать мою функцию.