3

この形式名 filename_ex.doc のサブフォルダーとファイルを含むフォルダー A からファイルの名前をバッチで変更し、filename.doc のように見せるにはどうすればよいですか?

私はしばらくの間これをやろうとしてきましたが、それは壮大な失敗でした. 助けてください。

4

1 に答える 1

3

サブフォルダー内のファイルの名前も変更したいと思われますが、これは 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
)
于 2012-04-24T11:11:30.493 に答える