1

私がやりたいのは、さまざまなビデオファイル名を含むテキストファイルから特定のビデオファイル拡張子を除外することです。たとえば、filename.txtの内容は次のとおりです。

Red.mp4
Yellow.mp4
Blue.mp4
Orange.wmv
Purple.wmv

次に、このファイルを.mp4のみで解析し、「パラメーターに」を使用して、それぞれが特定のファイルの特定のコードを含む複数の.txtファイルを作成します。言い換えれば、filename.txtの.mp4ビデオの数と同じ数のファイルを作成します私のコード

::==
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in ('type filename.txt ^|findstr ".mp4"') do (
set /a n+=1
echo >myfile!n!.txt
set v!n!=x264 --crf 23  --level 3.1 --tune film --o "%%a" "%%a.mkv"
)
set v
pause
::==

私には2つの問題があります:

  1. 「%%a.mkv」を適用するとファイルの名前が*.mp4.mkvになるため、%% aを変更して.mp4文字列を削除するにはどうすればよいですか。これは望ましくなく、.mp4は次のように手動で入力できます。 --o "%% a.mp4" "%% a.mkv"
  2. 必要なtxtファイルがすでに作成されている場合、変数v1、v2、v3...をそれぞれのテキストファイルに渡すにはどうすればよいですか。

    echo%v!n!%>> myfile!n!.txt がループ内にありますが、機能しなかったため、plzのアドバイス

4

1 に答える 1

2

1 つのループで変数の配列を作成し、2 番目のループでコンテンツをファイルに追加する必要はないと思います。すべてを 1 つのループで実行するだけです。

また、空のファイルを作成する必要はありません。その試みは正しくありませんECHO is off.。各ファイルに行が追加されます。空白行をエコーするには、を使用する必要があります>filename ECHO(。空のファイルを作成するには、copy nul filename.

これが問題になる可能性は低いですが、ファイル名に!. !遅延展開が有効になっている場合、FOR 変数の展開は破損します。この問題は、ループ内で遅延展開のオンとオフを切り替えることで解決できますが、別の解決策があります。別の FINDSTR コマンドを使用して各行の先頭に行番号を追加し、FOR ループで行番号とファイル名を解析します。これにより、カウンターをインクリメントする必要がなくなり、拡張を遅らせる必要がなくなります。

~nFOR 変数修飾子を使用して、拡張子なしで名前を取得します。

@echo off
for /f "tokens=1* delims=:" %%A in (
  'findstr /lie ".mp4" filename.txt^|findstr /n "^"'
) do (
  >"myfile%%A.txt" echo x264 --crf 23 --level 3.1 --tune film --o "%%B" "%%~nB.mkv"
)
于 2012-10-23T03:55:44.957 に答える