この形式名 filename_ex.doc のサブフォルダーとファイルを含むフォルダー A からファイルの名前をバッチで変更し、filename.doc のように見せるにはどうすればよいですか?
私はしばらくの間これをやろうとしてきましたが、それは壮大な失敗でした. 助けてください。
この形式名 filename_ex.doc のサブフォルダーとファイルを含むフォルダー A からファイルの名前をバッチで変更し、filename.doc のように見せるにはどうすればよいですか?
私はしばらくの間これをやろうとしてきましたが、それは壮大な失敗でした. 助けてください。
サブフォルダー内のファイルの名前も変更したいと思われますが、これは Martin James への 2 回目のコメントで方向性に問題があった場所です。DIR /S オプションを使用してそのコードを試したと思います。しかし、あなたはとても近かったです:-) 2つのループを使用する必要がありました!
編集 - コードを修正 出力が正しく表示されたら、ECHO をドロップして機能させます。
@echo off
for /r %%D in (.) do (
pushd "%%~fD"
for /f "tokens=1-3 delims=_." %%A in ('dir /b *_ex.ext 2^>nul') do echo ren "%%A_%%B.%%C" "%%A.%%C"
popd
)
_
上記は、各ファイル名に に表示されるもの.
以外のものが含まれていない限り機能します_ex.ext
。パス内の文字は問題ではありません。ファイル名だけが問題です。
これは、任意のファイル名 (Unicode 名を除く) で機能する、より堅牢なソリューションです。また、大幅に高速化されています。これは部分文字列操作を使用するため、名前から削除する文字数を知っている必要があります。あなたの例では、3文字です。繰り返しますが、結果のコマンドが正しいように見えたら、ECHO を削除します。
@echo off
setlocal disableDelayedExpansion
for /f "delims=" %%F in ('dir /b /s *_ex.ext') do (
set "old=%%F"
set "new=%%~nF"
setlocal enableDelayedExpansion
echo ren "!old!" "!new:~0,-3!.ext"
endlocal
)