バッチを使用して特定の種類のファイルの txt ファイルを作成する

バッチを使用して特定の種類のファイルの txt ファイルを作成する

すべての種類のファイルを含むフォルダーがあります。フォルダー パスが であるとしますE:/temp

.aviタイプ ファイルのみを対象に txt ファイルを作成し、その txt ファイルにムービーの名前を付けるようにします。つまり、.aviフォルダーに 20 個のクリップ ファイルがある場合、20 個の txt ファイルを開き、各 txt ファイルにクリップの名前を付けることになります。

また、txtファイル内に「HAPPY」という単語を書き込む必要があります(すべてのtxtファイルで同じになります)。

バッチファイルを使用するスクリプトは何でしょうか?

答え1

FOR操作したい要素を反復処理するには、を使用する必要があります。バッチファイルでワイルドカードに一致するファイルをループする方法詳細については。

その部分を解決したら、ファイルのファイル名を作成します.txt。ここでは、のコマンド ライン ドキュメントFORが役立ちます。

In addition, substitution of FOR variable references has been enhanced.
You can now use the following optional syntax:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only

最後のエントリが、私たちが求めているものです。 を切り捨てたい.aviので、~n変数で を使用して名前のみを取得します。 はここ%%~nf.txtから来ています。

現在のファイル名である から始めます%%f。次に、 で拡張子を切り取り%%~nf、 ... を追加します.txt。完了:%%~nf.txt

最後の問題は、次のようにすべてを 1 行で解決しようとする場合です。

FOR %%f IN (*.avi) DO ECHO HAPPY > %%~nf.txt

これは機能しません。シェルが を解釈して>、そのファイルに即座に出力を開始するためです。これは、私たちが望んでいることではありません。 をECHO各ファイルごとに処理したいので、単に複数の行に分割します。

@ECHO OFF

REM Iterate over all *.avi file in the current directory
FOR %%f IN (*.avi) DO (
    REM Cut off the extension from %%f, tack on .txt and 
    REM use it as the filename for our HAPPY output
    ECHO HAPPY > %%~nf.txt
)

答え2

という名前のテキストファイルを作成しますハッピー.txt「を含むハッピー「」という名前のバッチファイルを作成しますハッピーを作る.cmd以下を含みます:

for %%i in (*.avi) do copy happy.txt "%%i.txt"

走る幸せにする新しいテキスト ファイルには二重の拡張子が付きますが、必要に応じてそれを回避する方法があります。

関連情報