0

「x_1.txt x_2.txt x_3.txt、...」という名前のファイルがあります。これらのファイルを入力した他のプログラムは順序を認識できないため、「 x_1.txt 、 x_101.txt 、 x_101.txt 、 x_2.txt")。解決策は、ファイルの名前を x00001.txt 、 x00002.txt 、... に変更することです。これまでに .bat ファイルを以下に書きましたが、2 つの問題があります。 :

1-文字列 x_'number'.txt から 'number'.txt を削除するにはどうすればよいですか

2-(解決済み)この文字列の変数を使用してファイル名を変更するにはどうすればよいですか(このファイルの名前変更部分が機能していません!)

cls
setlocal enabledelayedexpansion
set /A count=100000
for %%f in (*.txt) do (
   set /a count+=1
   set str=!count:~1!
   echo !str!
   echo %%f
   set filename=%%f
   set filename=!filename:~0,5! /Comment: here I want to just keep the x_ part which I don't know how"
   echo !filename!
   set str3=!filname!!str! 
   echo !str3!
   /// ren %%f !str3!.txt  /Comment: Here I cannot use the variable str3,
   call:renamer %%f !str3!
 )

 :renamer
 ren %1 %2.txt

前もって感謝します

4

1 に答える 1

1

次の条件に該当する場合:

  • 現在のフォルダー内のすべての .txt ファイルの名前を変更したい
  • すべての .txt ファイル_の名前には、番号の直前に1 つだけ含まれています。
  • ファイル名に次のものが含まれていません!

次に、次のように動作します

@echo off
setlocal enableDelayedExpansion
for %%F in (*.txt) do for /f "tokens=1,2 delims=_." %%A in ("%%F") do (
  set num=0000%%B
  ren "%%F" "%%A!num:~-5!.txt"
)

しかし、条件を排除するには、はるかに複雑なコードが必要です。

テンプレートに一致するすべてのファイルの名前を適切に変更する必要がある 1 つの強力なソリューションを次に示します。

  • 名前に複数_を許可します。
  • _NNN.txtNNN は数字で終わる名前のファイルのみを名前変更します
  • !ファイル名で適切に処理します。

99999 を超える数値は適切に処理されないことに注意してください。0 のパディングの次数を拡張するのは簡単です。

@echo off
setlocal disableDelayedExpansion
pushd .
subst #: .
#:
for /f "eol=: delims=" %%F in ('dir /b /a-d *.txt^|findstr /er "_[0-9]*.txt"') do (
  set "name=%%~nF"
  setlocal enableDelayedExpansion
  for /f "eol=: delims=" %%A in ("!name:_=\x!") do (
    endlocal
    set "file=%%F"
    set "name=%%~pA"
    set "num=%%~nA"
    setlocal enableDelayedExpansion
    set "num=0000!num:~1!"
    set "name=!name:~1,-1!"
    ren "!file!" "!name:\x=_!!num:~-5!.txt"
    endlocal
  )
)
popd
subst /d #:
于 2012-12-14T18:00:27.313 に答える