すべての種類のファイルを含むフォルダーがあります。フォルダー パスが であるとします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"
走る幸せにする新しいテキスト ファイルには二重の拡張子が付きますが、必要に応じてそれを回避する方法があります。