ファイル名を最初の 16 文字まで削除して、ディレクトリ内の一連のファイルの名前を変更したいのですが、バッチ ファイルで forfiles コマンドを使用するときに @FNAME の部分文字列を取得する方法がわかりません。
助けていただければ幸いです。
ありがとう
ローランド
ファイル名を最初の 16 文字まで削除して、ディレクトリ内の一連のファイルの名前を変更したいのですが、バッチ ファイルで forfiles コマンドを使用するときに @FNAME の部分文字列を取得する方法がわかりません。
助けていただければ幸いです。
ありがとう
ローランド
ファイルごとに新しいコマンドを生成するため、同じバッチで変数を設定して使用forfiles
できるとは思わないため、これを行うのは非常に難しいでしょう("cmd /c command"
)。
ただし、単純なfor
ループを使用して同じ機能を簡単に実現できます。
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir C:\yourdir /s /b') do (
set file=%%~na
set ext=%%~xa
set new=!file:~0,16!
ren %%a !new!!ext!
)
これは、すべてのサブディレクトリも再帰します。選択したフォルダーだけが必要な場合は/s
、コマンドからを削除しますdir
。
また、ファイル名だけを削除しているため、後でファイル拡張子を追加するようにしました。そうしないと、拡張子の文字が 16 文字の制限にカウントされます。