0

ユーザー入力によってパスが定義されているフォルダーをスキャンし、最後に ffmpeg を適用して、すべてのメディア ファイル情報をテキスト ファイルに保存したいと考えています。次のコードは機能しません

@echo off
setLocal EnableDelayedExpansion
set /P "path=Enter folder path: "
dir %path% /B /O:N | findstr ".wmv$ .mpg$ .mkv$ .mpeg$ .mp4$ .avi$" >filename.txt
echo. >info.txt
for /f "tokens=* delims= " %%a in ('type filename.txt') do (
set in=%in%%%a
ffprobe "%path%!in!" 2>>info.txt
)
pause

ただし、次のようにユーザー入力を削除すると、コードは機能しますか?

@echo off
setLocal EnableDelayedExpansion
::set /P "path=Enter folder path: "
dir d:\Trainers\out\outt\ /B /O:N | findstr ".wmv$ .mpg$ .mkv$ .mpeg$ .mp4$ .avi$" >filename.txt
echo. >info.txt
for /f "tokens=* delims= " %%a in ('type filename.txt') do (
set in=%in%%%a
ffprobe "d:\Trainers\out\outt\!in!" 2>>info.txt
)
pause

上記のスクリプトは、ffprobe.exe を含むフォルダーに配置され、同じディレクトリに 2 つの txt ファイルが正常に作成されますd:\Trainers\out\outt\。これは、メディア ファイルをスキャンするディレクトリであり、このバット ファイルが実行されるディレクトリではないことに注意してください。ffprobe の基本的な構文は次のとおりです。

ffprobe "videofile"
4

2 に答える 2

5

パスとは異なる変数名を使用してください。

PATHすでに非常に重要なことを行っています。実際、非常に重要なので、それを変更することがまさにスクリプトが壊れている理由です。

より具体的には、ファイル名だけを使用して (パスをまったく使用せずに) プログラムを実行しようとすると、そのプログラムが作業ディレクトリに見つからない場合、PATH環境変数の内容が検索されます。表示されるエラー メッセージは確認していませんが、通常は で指定されたフォルダにある実行可能ファイルである findstr の実行に失敗している可能性がありますPATH

于 2012-10-30T13:39:59.457 に答える
1

ユーザー入力コマンドは、間違ったコンテキストのようです。引用符を削除すると、適切に機能するはずです。プロンプトをユーザー入力から分離するために引用符は必要ありません。

于 2012-11-18T21:50:59.537 に答える