2011-04-30 168 views
3

我想遍歷一個文件夾及其所有子文件夾,保留當前文件的計數器變量並將其重命名爲$ counter $ ExistingFileName。
例如批量遍歷子文件夾和重命名文件

$count = 1; 
foreach $file in $folder 
{ 
    $file.name = $count + $file.name; 
    $count++; 
} 

能回答這個問題的人將是我的英雄! :)
順便說一句,我使用的是Windows 7

+1

那麼容易嗎?我*可以*回答這個問題。 :)但嚴重的是,新的名稱模板到底是什麼?它是否像'file.ext' ==>'1file.ext'?或者它應該是'1 $ file.ext'?或者可能是'00001file.ext'? – 2011-04-30 09:51:19

回答

1

好,而你正在琢磨我在我的評論的問題到您的文章(或者可能還在做自己的方式回到這個網站來閱讀)這裏是我的試驗照射:

@ECHO OFF 
SET "rootdir=%~1" 
IF "%rootdir%"=="" SET rootdir=. 
SET cnt=0 
FOR /R "%rootdir%" %%f IN (*) DO (
    SET /A cnt+=1 
    SETLOCAL EnableDelayedExpansion 
    RENAME "%%f" "!cnt!%%~nxf" 
    ENDLOCAL 
) 

這將通過簡單地在前面加上自己的名字與編號,像這樣重命名文件:

1file.txt 
2program.exe 
... 

如果你願意,你可以有它是這樣的:

00001file.txt 
00002program.exe 

對於您需要進行兩處更改上面的腳本(以粗體突出):

@ECHO OFF 
SET "rootdir=%~1" 
IF "%rootdir%"=="" SET rootdir=. 
SET cnt=10000 
FOR /R "%rootdir%" %%f IN (*) DO (
    SET /A cnt+=1 
    SETLOCAL EnableDelayedExpansion 
    RENAME "%%f" "!cnt:~1!%%~nxf" 
    ENDLOCAL 
) 
+0

回答!但是當我將這段代碼粘貼到控制檯中時,我在FOR後面得到一個語法錯誤,說「%% f」無法處理 – 2011-04-30 10:26:09

+0

我不知道你明白了你的意思,這應該是一個腳本,保存在擴展名爲.bat或.cmd的文本文件中,然後運行腳本。順便說一下,我忘了補充一點,它也接受一個參數,它將成爲從哪裏開始遍歷的根文件夾。 – 2011-04-30 10:31:17

+0

好的,我把它粘貼到rename.bat。然後從控制檯,我打電話rename.bat c:\ test,我也嘗試rename.bat「c:\ test」,但得到一個語法錯誤:( – 2011-04-30 10:44:28

1
SETLOCAL ENABLEDELAYEDEXPANSION 
set count=1 
for /r .\folder %%f IN (*.*) do (
    ren "%%f" "!count!%%~nf%%~xf" 
    set /a count=!count!+1) 
+0

我試圖將它粘貼到控制檯中,但出現語法錯誤! :( – 2011-04-30 10:38:07

+0

把它放到一個批處理文件中,然後運行批處理文件,將。\文件夾重命名爲你想要處理的HD上的文件夾 – 2011-04-30 10:54:58

+0

所以如果文件夾是c:\ test \ 1,腳本怎麼樣應該看起來像?我正在搞一些選項,但總是得到語法錯誤 – 2011-04-30 11:17:21