使用批处理脚本向多个文件夹添加一些文本

时间:2013-02-14 18:12:44

标签: batch-file version directory rename

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

CCleaner 3.17
Firefox v.18.0.2
Avant Browser v2013.01.09

你可以看到他们中的一些人有“v”和“v”。作为版本指标,有些没有。

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

如果你能帮我解决这个问题,我将不胜感激。

先谢谢

1 个答案:

答案 0 :(得分:0)

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

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

@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
)