2013-02-14 168 views
0

我有一些軟件的文件夾,這樣的添加了一些文本到多個文件夾:使用批處理腳本

的CCleaner 3.17
火狐v.18.0.2
Avant瀏覽器v2013.01.09

,你可以看到其中一些有「v」和「v」。作爲版本指標,一些沒有它。

我想找到一種方法來添加「v」。在文件夾及其所有子文件夾中使用批處理文件編號之前。如果它沒有「v」或「v」。添加「v」。如果它有「v」替換爲「v」。並且如果它具有「v」的話。沒做什麼。

如果您能幫助我解決此問題,我將不勝感激。

在此先感謝

+0

到目前爲止你已經嘗試過了(http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – rojo 2013-02-14 19:33:22

回答

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 
)