我的烏拉拉練功坊

請來參觀移植到 Google Firebase 的成績 https://oolala.xyz/ken73chen/

2019年7月13日

.bat 處理帶引號的檔名

做了一個很簡單的 ffmpeg.bat 檔案,作用只是用 FFMPEG 將指定的檔案重新處理一次,一開始內容很簡單:
d:\ffmpeg\bin\ffmpeg.exe -i "%1" -acodec copy "done\%1" 就執行 ffmpeg.bat 檔名.mp4 就可以了,結果有一天因為檔名有空格...
有空格就得用引號 ffmpeg.bat "filename with spaces.mp4",這樣就出問題了,因為連引號都是 %1 的內容,真是讓人哭哭;最終解法..
setlocal chcp 65001 dir /b %1 > %TEMP%/__file set /p file=<%TEMP%/__file del %TEMP%/__file d:\ffmpeg\bin\ffmpeg.exe -i "%file%" -acodec copy "done\%file%" 重點在 chcp 和 dir /b;因為檔名不一定是 BIG5 能顯示的範圍之內,所以 dir /b 的檔名,不一定是正確的檔名 (dir 給他正確的檔名顯示,然後它回一個錯誤的...),所以要先改用 UTF8,然後利用 dir /b 去引號,就有個沒有引號的檔名可以拿來用了。

真是可喜可賀!

別忘了 WSL!

對,還有 WSL (Windows Subsystem for Linux),在 ffmpeg.bat 同一個目錄下建一個 ffmpeg.sh
#!/bin/sh file=$1 dir=`dirname $(readlink -fn $0)` cd $dir /mnt/d/ffmpeg/bin/ffmpeg.exe -i "$file" -acodec copy "done/$file" 還活不到一天的 ffmpeg.bat,就改成: wsl /mnt/d/Videos/這是秘密/ffmpeg.sh %1 ffmpeg 可以在 Linux 裡面裝一個來用,我是用 Windows 的,因為 Linux 裡面的跑一半就 coredump,沒有查原因,就直接改用 Windows 版本的了。

沒有留言:

張貼留言