0

私はこれらのようないくつかのソフトウェアフォルダを持っています:

CCleaner 3.17
Firefox v.18.0.2
Avant Browser v2013.01.09

ご覧のとおり、それらのいくつかには「v」と「v」があります。バージョンインジケーターとして、一部にはありません。

「v」を追加する方法を見つけようとしています。バッチファイルを使用するフォルダとそのすべてのサブフォルダの番号の前。「v」または「v」がない場合。「v」を追加します。「v」がある場合は「v」に置き換えます。そしてそれが「v」を持っている場合。何もしない。

この件で私を助けていただければ幸いです。

前もって感謝します

4

1 に答える 1

0

これは少し注意が必要です。私の解決策は、バージョン番号が既存のフォルダー名の最後のスペースの後の残りのテキストであると想定しています。

以下のコードは、名前に少なくとも1つのスペースがある現在のディレクトリ内のすべてのフォルダの名前を適切に変更します。サブフォルダに戻ることはありません。!バージョンテキストにまたはが含まれているとコードが壊れます=が、問題になる可能性はほとんどありません。

@echo off
setlocal disableDelayedExpansion
for /d %%F in ("* *") do (
  set "folder=%%F"
  setlocal enableDelayedExpansion
  for %%A in ("!folder: =\!") do (
    for /f "eol=: tokens=* delims=v." %%B in ("%%~nxA") do (
      if "%%~nxA" neq "v.%%~B" ren "!folder!" "!folder:%%~nxA=v.%%~B!"
    )
  )
  endlocal
)

サブフォルダーに再帰する場合は、外側のループが必要です。フォルダーは逆の順序で並べ替えて、最も深いフォルダーが最初に処理されるようにする必要があります。

@echo off
setlocal disableDelayedExpansion
for /f "eol=: delims=" %%D in ('dir /s /ad /b * ^| sort /r') do (
  pushd "%%D"
  for /d %%F in ("* *") do (
    set "folder=%%F"
    setlocal enableDelayedExpansion
    for %%A in ("!folder: =\!") do (
      for /f "eol=: tokens=* delims=v." %%B in ("%%~nxA") do (
        if "%%~nxA" neq "v.%%~B" ren "!folder!" "!folder: %%~nxA= v.%%~B!"
      )
    )
    endlocal
  )
  popd
)
于 2013-02-14T22:25:44.733 に答える