我正在使用 jq,但沒有設法在我的批處理腳本中從 .json 檔案(我由 mediainfo 生成)中提取一個值。
我需要變數中的“持續時間”的值以供進一步使用......
有人可以給我一個提示,我對所有這些{[]}感到困惑......
{
"creatingLibrary": {
"name": "MediaInfoLib",
"version": "21.09",
"url": "https://mediaarea.net/MediaInfo"
},
"media": {
"@ref": "J:\\Austria\\Tag5\\EOS_ben\\100EOS5D\\TW_6248.MOV",
"track": [
{
"@type": "General",
"VideoCount": "1",
"AudioCount": "1",
"OtherCount": "1",
"FileExtension": "MOV",
"Format": "MPEG-4",
"Format_Profile": "QuickTime",
"CodecID": "qt ",
"CodecID_Version": "2007.09",
"CodecID_Compatible": "qt /CAEP",
"FileSize": "37229924",
"Duration": "9.520",
"OverallBitRate_Mode": "VBR",
"OverallBitRate": "31285650",
"FrameRate": "25.000",
"FrameCount": "238",
"StreamSize": "100484",
"HeaderSize": "98304",
"DataSize": "37130652",
"FooterSize": "968",
"IsStreamable": "Yes",
"Encoded_Date": "UTC 2014-03-13 22:31:17",
"Tagged_Date": "UTC 2014-03-13 22:31:17",
"File_Created_Date": "UTC 2014-03-13 21:31:26.000",
"File_Created_Date_Local": "2014-03-13 23:31:26.000",
"File_Modified_Date": "UTC 2014-03-13 21:31:26.000",
"File_Modified_Date_Local": "2014-03-13 23:31:26.000",
"Copyright": "BEN PAYA",
"extra": {
"com_apple_quicktime_make": "Canon",
"com_apple_quicktime_model": "Canon EOS 5D Mark III",
"com_apple_quicktime_rating_user": "0.000",
"com_apple_quicktime_author": "PhilFried"
}
},
{
"@type": "Video",
"StreamOrder": "0",
"ID": "1",
.
.
.
uj5u.com熱心網友回復:
那將是
your_json_file.media.track[0].Duration
where.track[index]表示某個元素(軌道),在這種情況下是第一個元素。
您應該嘗試使用像https://jsonformatter.curiousconcept.com/這樣的 JSON 格式化程式來獲得自動縮進。
編輯:這是您的檔案內容縮進:
{
"creatingLibrary":{
"name":"MediaInfoLib",
"version":"21.09",
"url":"https://mediaarea.net/MediaInfo"
},
"media":{
"@ref":"J:\\Austria\\Tag5\\EOS_ben\\100EOS5D\\TW_6248.MOV",
"track":[
{
"@type":"General",
"VideoCount":"1",
"AudioCount":"1",
"OtherCount":"1",
"FileExtension":"MOV",
"Format":"MPEG-4",
"Format_Profile":"QuickTime",
"CodecID":"qt ",
"CodecID_Version":"2007.09",
"CodecID_Compatible":"qt /CAEP",
"FileSize":"37229924",
"Duration":"9.520",
"OverallBitRate_Mode":"VBR",
"OverallBitRate":"31285650",
"FrameRate":"25.000",
"FrameCount":"238",
"StreamSize":"100484",
"HeaderSize":"98304",
"DataSize":"37130652",
"FooterSize":"968",
"IsStreamable":"Yes",
"Encoded_Date":"UTC 2014-03-13 22:31:17",
"Tagged_Date":"UTC 2014-03-13 22:31:17",
"File_Created_Date":"UTC 2014-03-13 21:31:26.000",
"File_Created_Date_Local":"2014-03-13 23:31:26.000",
"File_Modified_Date":"UTC 2014-03-13 21:31:26.000",
"File_Modified_Date_Local":"2014-03-13 23:31:26.000",
"Copyright":"BEN PAYA",
"extra":{
"com_apple_quicktime_make":"Canon",
"com_apple_quicktime_model":"Canon EOS 5D Mark III",
"com_apple_quicktime_rating_user":"0.000",
"com_apple_quicktime_author":"PhilFried"
}
}
]
}
}
uj5u.com熱心網友回復:
@ECHO OFF
SETLOCAL
rem The following settings for the source directory & filename are names
rem that I use for testing and deliberately include names which include spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:\your files"
SET "filename1=%sourcedir%\q71716898.txt"
REM (
FOR /f "usebackqtokens=1,2delims=:, " %%b IN ("%filename1%") DO (
IF /i "%%~b"=="duration" SET "duration=%%~c"
)
SET duration
GOTO :EOF
合理規范for /f "tokens加工。
for/f依次從每一行分配令牌,令牌 1 到,%%b令牌 2 到%%c。
選擇 , 和 的分隔符:,,目標space行上的第一個標記是"Duration"和第二個"9.520"。
因此,請檢查 "%%~b" (去掉引號,然后用引號重新括起來的標記與用引號括起來的字串相同duration),如果是,則將第二個標記的值分配給變數duration。
如果令牌包含會干擾if決議的分隔符,并且/i使比較不區分大小寫,則需要 dequote/enquote 儀式。
uj5u.com熱心網友回復:
最好使用能理解 JSON 語言的工具。這將在batch-filefrom中運行cmd。
我注意到這track是一個陣列。此代碼選擇陣列的第一個元素。
FOR /F "delims=" %%A IN ('powershell.exe -NoLogo -NoProfile -Command ^
"(ConvertFrom-Json -InputObject (Get-Content -Path '.\dura.json' -Raw)).media.track[0].Duration"') DO (SET "DURATION=%%~A")
ECHO DURATION is %DURATION%
如果您想處理Duration所有曲目,請嘗試一些代碼并在需要時創建一個新問題。
{}圍繞哈希表使用。[]指示和陣列的使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/455190.html
