0

我有一些像这样的软件文件夹:

CCleaner 3.17
火狐 v.18.0.2
前卫浏览器 v2013.01.09

正如你所看到的,其中一些有“v”和“v”。作为版本指示器,有些没有。

我正在尝试找到一种添加“v”的方法。在使用批处理文件的文件夹及其所有子文件夹中的编号之前。如果它没有“v”或“v”。添加“v” 如果它有“v”,则将其替换为“v”。如果它有“v”。没做什么。

如果您能在这件事上帮助我,我将不胜感激。

提前致谢

4

1 回答 1

0

这有点棘手。我的解决方案假定版本号是现有文件夹名称中最后一个空格之后的剩余文本。

下面的代码将适当地重命名当前目录中名称中至少有一个空格的所有文件夹。它不会递归到子文件夹中。!如果版本文本包含or ,则代码将中断=,尽管这不太可能成为问题。

@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 回答